-- Increment / Decrement vim.keymap.set('n', '+', '') vim.keymap.set('n', '-', '') -- Select all vim.keymap.set('n', '', 'ggG') -- Replace currently selected text with default register without yanking it vim.keymap.set('x', 'p', '"_dP') -- Delete and change without yanking vim.keymap.set({ 'n', 'x' }, '', '"_d', { desc = 'Delete Without Yanking' }) vim.keymap.set({ 'n', 'x' }, '', '"_c', { desc = 'Change Without Yanking' }) -- Deleting without yanking empty line vim.keymap.set('n', 'dd', function() local is_empty_line = vim.api.nvim_get_current_line():match('^%s*$') if is_empty_line then return '"_dd' else return 'dd' end end, { noremap = true, expr = true, desc = "Don't Yank Empty Line to Clipboard" }) -- Search inside visually highlighted text vim.keymap.set('x', 'g/', '/\\%V', { silent = false, desc = 'Search Inside Visual Selection' }) -- Search visually selected text (slightly better than builtins in Neovim>=0.8) vim.keymap.set('x', '*', [[y/\V=escape(@", '/\')]], { desc = 'Search Selected Text', silent = true }) vim.keymap.set( 'x', '#', [[y?\V=escape(@", '?\')]], { desc = 'Search Selected Text (Backwards)', silent = true } ) -- save file vim.keymap.set('n', 'w', ':w', { desc = 'Save file' }) -- save and quit vim.keymap.set('n', 'Q', 'wq!', { desc = 'Force save and quit' }) -- Clear highlights on search when pressing in normal mode vim.keymap.set('n', '', 'nohlsearch') -- Visual vim.keymap.sets vim.keymap.set('v', 'r', '"hy:%s/h//g') -- Replace all instances of highlighted words vim.keymap.set('v', '', ':sort') -- Sort highlighted text in visual mode with Control+S vim.keymap.set('v', 'K', ":m '>-2gv=gv") -- Move current line up vim.keymap.set('v', 'J', ":m '>+1gv=gv") -- Move current line down -- for buffers vim.api.nvim_set_keymap('n', '', ':bnext', { noremap = true, silent = true }) vim.api.nvim_set_keymap('n', '', ':bprev', { noremap = true, silent = true }) --utility vim.keymap.setpings vim.keymap.set('n', 'n', 'nzzzv') -- keep the cursor centered when doing 'n' vim.keymap.set('n', 'N', 'Nzzzv') -- keep the cursor centered when doing 'N' vim.keymap.set('n', 'J', 'mzJ`z', { desc = 'Join line without moving the cursor' }) vim.keymap.set('n', 'cn', '*``cgn', { desc = 'Change next match by pressing dot (.)' }) vim.keymap.set('n', 'cN', '*``cgN', { desc = 'Change previous match by pressing dot (.)' }) vim.keymap.set('n', 'vp', '`[v`]', { desc = 'Select pasted text' }) vim.keymap.set('n', '', 'zz', { desc = 'Scroll down' }) vim.keymap.set('n', '', 'zz', { desc = 'Scroll up' }) vim.keymap.set({ 'n', 'v' }, 'y', '"+y', { desc = 'Copy to system clipboard' }) vim.keymap.set({ 'n', 'v' }, 'p', '"+p', { desc = 'Paste from system clipboard' }) vim.keymap.set({ 'i' }, '', '', { desc = 'Move cursor to right' }) vim.keymap.set({ 'i' }, '', '', { desc = 'Move cursor to right' }) -- Better window management vim.keymap.set('n', 'vs', ':vsp', { noremap = true, silent = true }) vim.keymap.set('n', 'hs', ':sp', { noremap = true, silent = true }) vim.keymap.set('n', '', 'h', { desc = 'Move to left split' }) vim.keymap.set('n', '', 'j', { desc = 'Move to below split' }) vim.keymap.set('n', '', 'k', { desc = 'Move to above split' }) vim.keymap.set('n', '', 'l', { desc = 'Move to right split' }) vim.keymap.set('n', '', 'resize -2', { desc = 'Resize split up' }) vim.keymap.set('n', '', 'resize +2', { desc = 'Resize split down' }) vim.keymap.set('n', '', 'vertical resize -2', { desc = 'Resize split left' }) vim.keymap.set('n', '', 'vertical resize +2', { desc = 'Resize split right' }) -- Stay in indent mode vim.keymap.set('v', '<', '', '>gv', { desc = '(V) Indent to right' }) vim.keymap.set('n', 'lo', 'lopen', { desc = 'Open location list' }) vim.keymap.set('n', 'lc', 'lclose', { desc = 'Close location list' }) vim.keymap.set('n', 'ln', 'lnext', { desc = 'Next location list item' }) vim.keymap.set('n', 'lp', 'lprev', { desc = 'Previous location list item' }) -- insert semicolon in the end vim.keymap.set('i', '', 'miA;`ii', { desc = 'insert semicolon in the end' }) -- Change text without putting it into the vim register, vim.keymap.set({ 'n', 'x' }, 'c', '"_c', { desc = 'Change without yanking' }) vim.keymap.set({ 'n', 'x' }, 'C', '"_C', { desc = 'Change without yanking' }) vim.keymap.set({ 'n', 'x' }, 'cc', '"_cc', { desc = 'Change without yanking' }) vim.keymap.set({ 'n', 'x' }, 'x', '"_x', { desc = 'delete without yanking' }) -- Better escape using jk in insert and terminal mode vim.keymap.set('i', 'jk', '') vim.keymap.set('i', 'kj', '') vim.keymap.set('i', 'jj', '') -- Terminal Mappings vim.keymap.set('t', 'jk', '') vim.keymap.set('t', 'kj', '') vim.keymap.set('t', '', '')