diff --git a/lua/config/autocmds.lua b/lua/config/autocmds.lua index befeecc..94c0d34 100644 --- a/lua/config/autocmds.lua +++ b/lua/config/autocmds.lua @@ -47,3 +47,9 @@ vim.api.nvim_create_autocmd({ 'WinLeave', 'InsertEnter' }, { end end, }) + +-- Removes trailing whitespace before saving +vim.api.nvim_create_autocmd({ 'BufWritePre' }, { + pattern = '*', + command = [[%s/\s\+$//e]], +}) diff --git a/lua/config/clipboard.lua b/lua/config/clipboard.lua index 984aab8..2dc7e12 100644 --- a/lua/config/clipboard.lua +++ b/lua/config/clipboard.lua @@ -12,9 +12,9 @@ if vim.env.CONTAINER then } end -vim.schedule(function() - vim.opt.clipboard = 'unnamedplus' -end) +-- vim.schedule(function() +-- vim.opt.clipboard = 'unnamedplus' +-- end) -- TEMP: Check if it helps with edge cases vim.api.nvim_create_user_command('FixClipboard', function() diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua index 558464f..90d5aac 100644 --- a/lua/config/keymaps.lua +++ b/lua/config/keymaps.lua @@ -1,54 +1,77 @@ -local map = vim.keymap.set +-- Helper functions +local function map(mode, lhs, rhs) + vim.keymap.set(mode, lhs, rhs, { silent = true }) +end -map('n', 'q', vim.diagnostic.setloclist) +local function cmd(str) + return '' .. str .. '' +end -map({ 'i', 'c' }, 'jk', '') -map('n', '', 'nohlsearch') +-- QOL +map('i', 'jk', '') +map('n', '', cmd('nohlsearch')) +map('n', 'q:', '') --- Prevent overriding the register -map('n', 'x', '"_x') +vim.keymap.set('n', 'J', 'mzJ`z') +vim.keymap.set('n', 'n', 'nzzzv') +vim.keymap.set('n', 'N', 'Nzzzv') --- Window Navigation +vim.keymap.set('x', 'J', ":m '>+1gv=gv") +vim.keymap.set('x', 'K', ":m '<-2gv=gv") + +vim.keymap.set('n', 's', [[:%s/\<\>//g]]) + +-- Proper registers +map('x', 'p', '"_dP') +map({ 'n', 'x' }, 'y', '"+y') +map('n', 'Y', '"+y$') +map({ 'n', 'x' }, 'd', '"_d') +map({ 'n', 'x' }, 'x', '"_x') + +-- Window navigation map('n', '', 'h') map('n', '', 'l') map('n', '', 'j') map('n', '', 'k') -- Tab management -map('n', 'tn', ':tabnew') -map('n', 'tc', ':tabclose') -map('n', 'tl', ':tabnext') -map('n', 'th', ':tabprevious') -map('n', 'tm.', ':tabmove +1') -map('n', 'tm,', ':tabmove -1') +map('n', ']t', cmd('tabnext')) +map('n', '[t', cmd('tabprevious')) +map('n', 'tt', cmd('tabnew')) +map('n', 'tn', cmd('tabnew')) +map('n', 'tc', cmd('tabclose')) +map('n', 'tl', cmd('tabmove +1')) +map('n', 'th', cmd('tabmove -1')) for i = 1, 9 do - map('n', string.format('%d', i), string.format('%dgt', i)) + map('n', string.format('t%d', i), string.format('%dgt', i)) end --- Buffer Management --- map('n', 'bl', ':ls') --- map('n', 'bd', ':bdelete') --- map('n', ']b', ':bnext') --- map('n', '[b', ':bprevious') --- map('n', 'bb', ':b') --- map('n', 'bo', ':bufdo bd|1bd') +-- Buffer management +map('n', ']b', cmd('bnext')) +map('n', '[b', cmd('bprevious')) +map('n', 'bl', cmd('ls')) +map('n', 'bb', '') -- toggle between buffers +map('n', 'bd', cmd('bdelete')) +map('n', 'bo', cmd('%bd|e#')) -- close all except current -- Terminal -map('n', 'tt', ':TermDefault') -map('n', 'tr', ':TermRelative') -map('n', 'ts', ':TermSplit') -map('n', 'tv', ':TermVSplit') - --- Terminal mode mappings -local tn = '' -map('t', '', tn) -map('t', 'jk', tn) -map('t', '', tn .. '') -map('t', '', 'wincmd h') -map('t', '', 'wincmd j') -map('t', '', 'wincmd k') -map('t', '', 'wincmd l') +map('n', 'xx', cmd('TermDefault')) +map('n', 'xr', cmd('TermRelative')) +map('n', 'xs', cmd('TermSplit')) +map('n', 'xv', cmd('TermVSplit')) +map('t', '', '') +map('t', '', '') +map('t', 'c', ':bd!') -- File explorer -vim.keymap.set('n', 'e', 'NvimTreeToggle') -vim.keymap.set('n', 'E', 'NvimTreeOpen') +map('n', 'e', cmd('NvimTreeToggle')) +map('n', 'E', cmd('NvimTreeOpen')) + +-- Diagnostics +map('n', ']d', function() + vim.diagnostic.jump({ count = 1, float = true }) +end) +map('n', '[d', function() + vim.diagnostic.jump({ count = -1, float = true }) +end) +map('n', 'q', vim.diagnostic.setloclist)