-- Keymaps for better default experience -- Set leader key vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' -- For conciseness local opts = { noremap = true, silent = true } -- Disable the spacebar key's default behavior in Normal and Visual modes vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) -- Allow moving the cursor through wrapped lines with j, k vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) -- clear highlights vim.keymap.set('n', '', ':noh', opts) -- save file vim.keymap.set('n', '', ' w ', opts) -- save file without auto-formatting vim.keymap.set('n', 'sn', 'noautocmd w ', opts) -- quit file vim.keymap.set('n', '', ' q ', opts) -- delete single character without copying into register vim.keymap.set('n', 'x', '"_x', opts) -- Vertical scroll and center vim.keymap.set('n', '', 'zz', opts) vim.keymap.set('n', '', 'zz', opts) -- Find and center vim.keymap.set('n', 'n', 'nzzzv') vim.keymap.set('n', 'N', 'Nzzzv') -- Resize with arrows vim.keymap.set('n', '', ':resize -2', opts) vim.keymap.set('n', '', ':resize +2', opts) vim.keymap.set('n', '', ':vertical resize -2', opts) vim.keymap.set('n', '', ':vertical resize +2', opts) -- Buffers vim.keymap.set('n', '', ':bnext', opts) vim.keymap.set('n', '', ':bprevious', opts) vim.keymap.set('n', 'x', ':Bdelete!', opts) -- close buffer vim.keymap.set('n', 'b', ' enew ', opts) -- new buffer -- Increment/decrement numbers vim.keymap.set('n', '+', '', opts) -- increment vim.keymap.set('n', '-', '', opts) -- decrement -- Window management vim.keymap.set('n', 'v', 'v', opts) -- split window vertically vim.keymap.set('n', 'h', 's', opts) -- split window horizontally vim.keymap.set('n', 'se', '=', opts) -- make split windows equal width & height vim.keymap.set('n', 'xs', ':close', opts) -- close current split window -- Navigate between splits vim.keymap.set('n', '', ':wincmd k', opts) vim.keymap.set('n', '', ':wincmd j', opts) vim.keymap.set('n', '', ':wincmd h', opts) vim.keymap.set('n', '', ':wincmd l', opts) -- Tabs vim.keymap.set('n', 'to', ':tabnew', opts) -- open new tab vim.keymap.set('n', 'tx', ':tabclose', opts) -- close current tab vim.keymap.set('n', 'tn', ':tabn', opts) -- go to next tab vim.keymap.set('n', 'tp', ':tabp', opts) -- go to previous tab -- Toggle line wrapping vim.keymap.set('n', 'lw', 'set wrap!', opts) -- Press jk fast to exit insert mode vim.keymap.set('i', 'jk', '', opts) vim.keymap.set('i', 'kj', '', opts) -- Stay in indent mode vim.keymap.set('v', '<', '', '>gv', opts) -- Move text up and down vim.keymap.set('v', '', ':m .+1==', opts) vim.keymap.set('v', '', ':m .-2==', opts) -- Keep last yanked when pasting vim.keymap.set('v', 'p', '"_dP', opts) -- Replace word under cursor vim.keymap.set('n', 'j', '*``cgn', opts) -- Explicitly yank to system clipboard (highlighted and entire row) vim.keymap.set({ 'n', 'v' }, 'y', [["+y]]) vim.keymap.set('n', 'Y', [["+Y]]) -- Toggle diagnostics local diagnostics_active = true vim.keymap.set('n', 'do', function() diagnostics_active = not diagnostics_active if diagnostics_active then vim.diagnostic.enable(0) else vim.diagnostic.disable(0) end end) -- Diagnostic keymaps vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) vim.keymap.set('n', 'd', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) -- Save and load session vim.keymap.set('n', 'ss', ':mksession! .session.vim', { noremap = true, silent = false }) vim.keymap.set('n', 'sl', ':source .session.vim', { noremap = true, silent = false })