diff --git a/.config/nvim/lua/core/keymap.lua b/.config/nvim/lua/core/keymap.lua index c6f9512..76ceba0 100644 --- a/.config/nvim/lua/core/keymap.lua +++ b/.config/nvim/lua/core/keymap.lua @@ -1,187 +1,203 @@ --- ──────────────────────[ set leader key to space ]────────────────────── +-- ───────────────────────────────────────( set leader key to space )─ vim.g.mapleader = ' ' vim.g.maplocalleader = '\\' local keymap = vim.keymap --- ────────────────────────────[ general use ]──────────────────────────── -keymap.set('i', 'jk', '', { desc = 'Exit insert mode with jk' }) -keymap.set('n', 'nh', ':nohl', { desc = 'Clear search highlights' }) +local function opts(desc) + return { desc = desc, silent = true } +end --- ────────────────────────────[ formatting ]───────────────────────── +-- ───────────────────────────────────────────────────( general use )─ +keymap.set('i', 'jk', '', opts('Exit insert mode with jk')) +keymap.set('n', 'nh', ':nohl', opts('Clear search highlights')) +keymap.set({ 'n', 'v' }, 'cm', 'Noice dismiss', opts('Dismiss notifications')) + +-- ────────────────────────────────────────────────────( formatting )─ keymap.set({ 'n', 'v' }, 'F', function() - require('conform').format({ - lsp_fallback = true, - async = false, - timeout_ms = 1000, - }) -end, { desc = 'Format file or selection' }) + require('conform').format({ + lsp_fallback = true, + async = false, + timeout_ms = 1000, + }) +end, opts('Format file or selection')) --- ──────────────────────────────[ linting ]────────────────────────────── +-- ───────────────────────────────────────────────────────( linting )─ keymap.set('n', 'l', function() - require('lint').try_lint() -end, { desc = 'Trigger linting for current file' }) + require('lint').try_lint() +end, opts('Trigger linting for current file')) --- ──────────────────────────[ inc/dec numbers ]────────────────────────── -keymap.set('n', '+', '', { desc = 'Increment number' }) -keymap.set('n', '-', '', { desc = 'Decrement number' }) +-- ───────────────────────────────────────────────( inc/dec numbers )─ +keymap.set('n', '+', '', opts('Increment number')) +keymap.set('n', '-', '', opts('Decrement number')) --- ─────────────────────────[ split management ]────────────────────── -keymap.set('n', 'sv', 'v', { desc = 'Split window vertically' }) -keymap.set('n', 'sh', 's', { desc = 'Split window horizontally' }) -keymap.set('n', 'se', '=', { desc = 'Make splits equal size' }) -keymap.set('n', 'sx', 'close', { desc = 'Close current split' }) -keymap.set('n', 'sm', 'MaximizerToggle', { desc = 'Maximize/Minimize a split' }) +-- ──────────────────────────────────────────────( split management )─ +keymap.set('n', 'sv', 'v', opts('Split window vertically')) +keymap.set('n', 'sh', 's', opts('Split window horizontally')) +keymap.set('n', 'se', '=', opts('Make splits equal size')) +keymap.set('n', 'sx', 'close', opts('Close current split')) +keymap.set('n', 'sm', 'MaximizerToggle', opts('Maximize/Minimize a split')) --- ──────────────────────────[ tab management ]─────────────────────── -keymap.set('n', 'to', 'tabnew', { desc = 'Open new tab' }) -keymap.set('n', 'tx', 'tabclose', { desc = 'Close current tab' }) --- keymap.set("n", "tn", "tabn", { desc = "Go to next tab" }) --- keymap.set("n", "tp", "tabp", { desc = "Go to previous tab" }) -keymap.set('n', 'tf', 'tabnew %', { desc = 'Open current buffer in new tab' }) +-- ────────────────────────────────────────────────( tab management )─ +keymap.set('n', 'to', 'tabnew', opts('Open new tab')) +keymap.set('n', 'tx', 'tabclose', opts('Close current tab')) +-- keymap.set("n", "tn", "tabn", opts("Go to next tab")) +-- keymap.set("n", "tp", "tabp", opts("Go to previous tab")) +keymap.set('n', 'tf', 'tabnew %', opts('Open current buffer in new tab')) --- ────────────────────────────[ bufferline ]───────────────────────── -keymap.set('n', 'bp', 'BufferLineTogglePin', { desc = 'Toggle pinned tab' }) -keymap.set('n', 'bg', 'BufferLinePick', { desc = 'Pick tab' }) -keymap.set('n', 'bx', 'bdelete', { desc = 'Close tab' }) -keymap.set('n', 'bX', 'BufferLineCloseOthers', { desc = 'Close other tabs' }) -keymap.set('n', ']b', 'BufferLineCycleNext', { desc = 'Next tab' }) -keymap.set('n', '[b', 'BufferLineCyclePrev', { desc = 'Previous tab' }) -keymap.set('n', '', 'BufferLineMoveNext', { desc = 'Move tab to the right' }) -keymap.set('n', '', 'BufferLineMovePrev', { desc = 'Move tab to the left' }) +-- ────────────────────────────────────────────────────( bufferline )─ +keymap.set('n', 'bp', 'BufferLineTogglePin', opts('Toggle pinned tab')) +keymap.set('n', 'bg', 'BufferLinePick', opts('Pick tab')) +keymap.set('n', 'bx', 'bdelete', opts('Close tab')) +keymap.set('n', 'bX', 'BufferLineCloseOthers', opts('Close other tabs')) +keymap.set('n', ']b', 'BufferLineCycleNext', opts('Next tab')) +keymap.set('n', '[b', 'BufferLineCyclePrev', opts('Previous tab')) +keymap.set('n', '', 'BufferLineMoveNext', opts('Move tab to the right')) +keymap.set('n', '', 'BufferLineMovePrev', opts('Move tab to the left')) --- ────────────────────────[ session management ]───────────────────── -keymap.set('n', 'wa', 'SessionToggleAutoSave', { desc = 'Toggle session autosave' }) -keymap.set('n', 'wD', 'Autosession delete', { desc = 'Delete a session' }) -keymap.set('n', 'wd', 'SessionDelete', { desc = 'Delete session for cwd' }) -keymap.set('n', 'wl', 'SessionSearch', { desc = 'Open session picker' }) -keymap.set('n', 'wr', 'SessionRestore', { desc = 'Restore session for cwd' }) -keymap.set('n', 'ws', 'SessionSave', { desc = 'Save session for cwd' }) +-- ────────────────────────────────────────────( session management )─ +keymap.set('n', 'wa', 'SessionToggleAutoSave', opts('Toggle session autosave')) +keymap.set('n', 'wD', 'Autosession delete', opts('Delete a session')) +keymap.set('n', 'wd', 'SessionDelete', opts('Delete session for cwd')) +keymap.set('n', 'wl', 'SessionSearch', opts('Open session picker')) +keymap.set('n', 'wr', 'SessionRestore', opts('Restore session for cwd')) +keymap.set('n', 'ws', 'SessionSave', opts('Save session for cwd')) --- ───────────────────────────[ todo comments ]─────────────────────────── +-- ─────────────────────────────────────────────────( todo comments )─ keymap.set('n', ']t', function() - require('todo-comments').jump_next() -end, { desc = 'Next todo comment' }) + require('todo-comments').jump_next() +end, opts('Next todo comment')) keymap.set('n', '[t', function() - require('todo-comments').jump_prev() -end, { desc = 'Previous todo comment' }) + require('todo-comments').jump_prev() +end, opts('Previous todo comment')) --- ──────────────────────────────[ trouble ]────────────────────────────── -keymap.set('n', 'xw', 'Trouble diagnostics toggle', { desc = 'Open trouble workspace diagnostics' }) +-- ───────────────────────────────────────────────────────( trouble )─ +keymap.set('n', 'xw', 'Trouble diagnostics toggle', opts('Open trouble workspace diagnostics')) keymap.set( - 'n', - 'xd', - 'Trouble diagnostics toggle filter.buf=0', - { desc = 'Open trouble document diagnostics' } + 'n', + 'xd', + 'Trouble diagnostics toggle filter.buf=0', + opts('Open trouble document diagnostics') ) -keymap.set('n', 'xq', 'Trouble quickfix toggle', { desc = 'Open trouble quickfix list' }) -keymap.set('n', 'xl', 'Trouble loclist toggle', { desc = 'Open trouble location list' }) -keymap.set('n', 'xt', 'Trouble todo toggle', { desc = 'Open todos in trouble' }) +keymap.set('n', 'xq', 'Trouble quickfix toggle', opts('Open trouble quickfix list')) +keymap.set('n', 'xl', 'Trouble loclist toggle', opts('Open trouble location list')) +keymap.set('n', 'xt', 'Trouble todo toggle', opts('Open todos in trouble')) --- ─────────────────────────────[ telescope ]───────────────────────────── +-- ─────────────────────────────────────────────────────( telescope )─ keymap.set( - 'n', - 'ff', - 'Telescope find_files initial_mode=insert sort_mru=true sort_lastused=true select_current=true', - { desc = 'Fuzzy find files in cwd' } + 'n', + 'ff', + 'Telescope find_files initial_mode=insert sort_mru=true sort_lastused=true select_current=true', + opts('Fuzzy find files in cwd') ) keymap.set( - 'n', - 'fr', - 'Telescope oldfiles initial_mode=insert sort_mru=true sort_lastused=true select_current=true', - { desc = 'Fuzzy find recent files' } + 'n', + 'fr', + 'Telescope oldfiles initial_mode=insert sort_mru=true sort_lastused=true select_current=true', + opts('Fuzzy find recent files') ) -keymap.set('n', 'fs', 'Telescope current_buffer_fuzzy_find', { desc = 'Find string in this buffer' }) -keymap.set('n', 'fS', 'Telescope live_grep', { desc = 'Find string in cwd' }) -keymap.set('n', 'fc', 'Telescope grep_string', { desc = 'Find string under cursor in cwd' }) +keymap.set('n', 'fs', 'Telescope current_buffer_fuzzy_find', opts('Find string in this buffer')) +keymap.set('n', 'fS', 'Telescope live_grep', opts('Find string in cwd')) +keymap.set('n', 'fc', 'Telescope grep_string', opts('Find string under cursor in cwd')) keymap.set( - 'n', - 'ft', - 'TodoTelescope initial_mode=normal sort_mru=true sort_lastused=true select_current=true', - { desc = 'Find todos' } + 'n', + 'ft', + 'TodoTelescope initial_mode=normal sort_mru=true sort_lastused=true select_current=true', + opts('Find todos') ) keymap.set( - 'n', - 'bb', - 'Telescope buffers initial_mode=normal sort_mru=true sort_lastused=true select_current=true', - { desc = 'Select from open buffers' } + 'n', + 'bb', + 'Telescope buffers initial_mode=normal sort_mru=true sort_lastused=true select_current=true', + opts('Select from open buffers') ) --- ────────────────────────────[ substitute ]───────────────────────── +-- ────────────────────────────────────────────────────( substitute )─ keymap.set('n', 's', function() - require('substitute').operator() -end, { desc = 'Substitute with motion' }) + require('substitute').operator() +end, opts('Substitute with motion')) keymap.set('n', 'ss', function() - require('substitute').line() -end, { desc = 'Substitute line' }) + require('substitute').line() +end, opts('Substitute line')) keymap.set('n', 'S', function() - require('substitute').eol() -end, { desc = 'Substitute to end of line' }) + require('substitute').eol() +end, opts('Substitute to end of line')) keymap.set('x', 's', function() - require('substitute').visual() -end, { desc = 'Substitute in visual mode' }) + require('substitute').visual() +end, opts('Substitute in visual mode')) --- ─────────────────────────────[ nvim-tree ]───────────────────────────── -keymap.set('n', 'ee', 'NvimTreeToggle', { desc = 'Toggle file explorer' }) -keymap.set('n', 'ef', 'NvimTreeFindFileToggle', { desc = 'Toggle file explorer on current file' }) -keymap.set('n', 'ec', 'NvimTreeCollapse', { desc = 'Collapse file explorer' }) -keymap.set('n', 'er', 'NvimTreeRefresh', { desc = 'Refresh file explorer' }) +-- ─────────────────────────────────────────────────────( nvim-tree )─ +keymap.set('n', 'ee', 'NvimTreeToggle', opts('Toggle file explorer')) +keymap.set('n', 'ef', 'NvimTreeFindFileToggle', opts('Toggle file explorer on current file')) +keymap.set('n', 'ec', 'NvimTreeCollapse', opts('Collapse file explorer')) +keymap.set('n', 'er', 'NvimTreeRefresh', opts('Refresh file explorer')) --- ───────────────────────────────[ diff ]──────────────────────────── +-- ──────────────────────────────────────────────────────────( diff )─ keymap.set('n', 'hd', function() - require('gitsigns').diffthis() -end, { desc = 'Diff this' }) + require('gitsigns').diffthis() +end, opts('Diff this')) keymap.set('n', 'hD', function() - require('gitsigns').diffthis('~') -end, { desc = 'Diff this ~' }) + require('gitsigns').diffthis('~') +end, opts('Diff this ~')) --- ────────────────────────────────[ git ]──────────────────────────────── -keymap.set('n', 'lg', 'LazyGit', { desc = 'Open LazyGit' }) +-- ───────────────────────────────────────────────────────────( git )─ +keymap.set('n', 'Lg', 'LazyGit', opts('Open LazyGit')) keymap.set('n', ']h', function() - require('gitsigns').nav_hunk('next') -end, { desc = 'Next hunk' }) + require('gitsigns').nav_hunk('next') +end, opts('Next hunk')) keymap.set('n', '[h', function() - require('gitsigns').nav_hunk('prev') -end, { desc = 'Prev hunk' }) + require('gitsigns').nav_hunk('prev') +end, opts('Prev hunk')) keymap.set('n', 'hs', function() - require('gitsigns').stage_hunk() -end, { desc = 'Stage Hunk' }) + require('gitsigns').stage_hunk() +end, opts('Stage Hunk')) keymap.set('n', 'hr', function() - require('gitsigns').reset_hunk() -end, { desc = 'Reset Hunk' }) + require('gitsigns').reset_hunk() +end, opts('Reset Hunk')) keymap.set('v', 'hs', function() - require('gitsigns').stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) -end, { desc = 'Stage Hunk' }) + require('gitsigns').stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) +end, opts('Stage Hunk')) keymap.set('v', 'hr', function() - require('gitsigns').reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) -end, { desc = 'Reset Hunk' }) + require('gitsigns').reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) +end, opts('Reset Hunk')) keymap.set('n', 'hS', function() - require('gitsigns').stage_buffer() -end, { desc = 'Stage buffer' }) + require('gitsigns').stage_buffer() +end, opts('Stage buffer')) keymap.set('n', 'hR', function() - require('gitsigns').reset_buffer() -end, { desc = 'Reset buffer' }) + require('gitsigns').reset_buffer() +end, opts('Reset buffer')) keymap.set('n', 'hu', function() - require('gitsigns').undo_stage_hunk() -end, { desc = 'Undo stage hunk' }) + require('gitsigns').undo_stage_hunk() +end, opts('Undo stage hunk')) keymap.set('n', 'hp', function() - require('gitsigns').preview_hunk() -end, { desc = 'Preview hunk' }) + require('gitsigns').preview_hunk() +end, opts('Preview hunk')) keymap.set('n', 'hb', function() - require('gitsigns').blame_line({ full = true }) -end, { desc = 'Blame line' }) + require('gitsigns').blame_line({ full = true }) +end, opts('Blame line')) keymap.set('n', 'hB', function() - require('gitsigns').toggle_current_line_blame() -end, { desc = 'Toggle line blame' }) -keymap.set({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'Gitsigns select hunk' }) + require('gitsigns').toggle_current_line_blame() +end, opts('Toggle line blame')) +keymap.set({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', opts('Gitsigns select hunk')) --- ────────────────────────────[ icon picker ]──────────────────────────── -keymap.set( - 'n', - 'i', - 'Telescope symbols initial_mode=normal theme=get_ivy', - { desc = 'Open icon picker' } -) --- keymap.set("n", "iy", "IconPickerYank", { desc = "Yank icon into register" }) --> Yank the selected icon into register --- keymap.set("i", "", "Telescope symbols initial_mode=normal theme=get_ivy", { desc = "Open icon picker" }) +-- ────────────────────────────────────────────────( fancy comments )─ +keymap.set({ 'n', 'v' }, 'Cd', 'CBd', opts('Delete comment decoration')) +keymap.set({ 'n', 'v' }, 'Cy', 'CBy', opts('Yank comment')) +-- ────────────────────────────────────────────────── comment boxes ── +keymap.set({ 'n', 'v' }, 'Cbl', 'CBllbox12', opts('Insert a comment box')) +keymap.set({ 'n', 'v' }, 'Cbc', 'CBccbox18', opts('Insert a comment box')) +keymap.set({ 'n', 'v' }, 'Cbr', 'CBrrbox15', opts('Insert a comment box')) +keymap.set({ 'n', 'v' }, 'Cba', 'CBccbox6', opts('Insert a callout')) +-- ────────────────────────────────────────────────── comment lines ── +keymap.set({ 'n', 'v' }, 'Cll', 'CBclline7', opts('Insert a left-aligned comment line')) +keymap.set({ 'n', 'v' }, 'Clc', 'CBccline7', opts('Insert a centered comment line')) +keymap.set({ 'n', 'v' }, 'Clr', 'CBcrline7', opts('Insert a right-aligned comment line')) +keymap.set({ 'n', 'v' }, 'ClL', 'CBclline', opts('Insert a simple comment line')) +keymap.set({ 'n', 'v' }, 'ClC', 'CBccline', opts('Insert a simple comment line')) +keymap.set({ 'n', 'v' }, 'ClR', 'CBcrline', opts('Insert a simple comment line')) + +-- ───────────────────────────────────────────────────( icon picker )─ +keymap.set('n', 'i', 'Telescope symbols initial_mode=normal theme=get_ivy', opts('Open icon picker')) +-- keymap.set("n", "iy", "IconPickerYank", opts("Yank icon into register")) --> Yank the selected icon into register +-- keymap.set("i", "", "Telescope symbols initial_mode=normal theme=get_ivy", opts("Open icon picker"))