return { { 'folke/which-key.nvim', opts = { spec = { { mode = { 'n', 'v' }, { '', group = 'leader', icon = { icon = '', color = 'green' }, }, { 'K', desc = 'keyword program' }, { '', desc = 'cut' }, { 'c', desc = 'change' }, { 'C', desc = 'change to end of line' }, { 'd', desc = 'delete' }, { 'D', desc = 'delete to end of line' }, { 'g', group = 'goto' }, { 'gd', desc = 'definition' }, { 'gD', desc = 'declaration' }, { 'gI', desc = 'implementation' }, { 'gy', desc = 't[y]pe definition' }, { 'ge', desc = 'previous end of word', icon = '' }, { 'gf', desc = 'file under cursor' }, { 'gg', desc = 'first line', icon = '󰘀' }, { 'gi', desc = 'last insert' }, { 'gO', desc = 'document symbols', icon = '󰊕' }, { 'gt', desc = 'next tab page' }, { 'gT', desc = 'previous tab page' }, { 'gu', desc = 'make lowercase', icon = '󰬵' }, { 'gU', desc = 'make uppercase', icon = '󰬶' }, { 'gx', desc = 'open with system app', icon = '󰏋' }, { 'g,', desc = 'newer position in change list' }, { 'g;', desc = 'older position in change list' }, { 'g[', desc = 'left "around"' }, { 'g]', desc = 'right "around"' }, { 'gs', group = 'surround', icon = { icon = '󰅲', color = 'purple' }, }, { 'K', desc = 'keyword program' }, { 'M', desc = 'middle line of window', icon = '󰘢' }, { 'x', desc = 'cut' }, { 'X', desc = 'cut to end of line' }, { 'Y', desc = 'yank to end of line' }, { 'z', group = 'fold/scroll/spell', icon = '' }, { 'zb', desc = 'bottom this line', icon = '' }, { 'ze', desc = 'right this line', icon = '' }, { 'zH', desc = 'half screen to the left', icon = '' }, { 'zL', desc = 'half screen to the right', icon = '' }, { 'zs', desc = 'left this line', icon = '' }, { 'zt', desc = 'top this line', icon = '' }, { 'zz', desc = 'center this line', icon = '󰘢' }, { 'z', desc = 'top this line', icon = '' }, { '[', group = 'previous', icon = '' }, { '[h', desc = 'hunk' }, { '[[', desc = 'reference' }, { '[b', desc = 'buffer' }, { '[B', desc = 'move buffer backwards' }, { '[d', desc = 'diagnostic' }, { '[D', desc = 'first diagnostic' }, { '[e', desc = 'error' }, { '[i', desc = 'top edge of scope' }, { '[l', desc = 'location list item' }, { '[L', desc = 'prev or first location list item' }, { '[m', desc = 'method start' }, { '[M', desc = 'method end' }, { '[p', desc = 'put & indent before' }, { '[P', desc = 'put & indent before' }, { '[q', desc = 'trouble/quickfix item' }, { '[Q', desc = 'prev or first trouble/quickfix item' }, { '[s', desc = 'misspelled word' }, { '[t', desc = 'todo comment' }, { '[T', desc = 'matching tag' }, { '[w', desc = 'warning' }, { '[%', desc = 'unmatched group' }, { '[(', desc = '(' }, { '[<', desc = '<' }, { '[{', desc = '{' }, { '[', desc = 'location list item in prev file' }, { '[', desc = 'trouble/quickfix item in prev file' }, { '[', desc = 'tag in preview window' }, { '[', desc = 'add empty line above' }, { ']', group = 'next', icon = '' }, { ']h', desc = 'hunk' }, { ']]', desc = 'reference' }, { ']b', desc = 'buffer' }, { ']B', desc = 'move buffer forwards' }, { ']d', desc = 'diagnostic' }, { ']D', desc = 'last diagnostic' }, { ']e', desc = 'error' }, { ']i', desc = 'bottom edge of scope' }, { ']l', desc = 'location list item' }, { ']L', desc = 'prev or last location list item' }, { ']m', desc = 'method start' }, { ']M', desc = 'method end' }, { ']p', desc = 'put & indent after' }, { ']P', desc = 'put & indent after' }, { ']q', desc = 'trouble/quickfix item' }, { ']Q', desc = 'prev or last trouble/quickfix item' }, { ']s', desc = 'misspelled word' }, { ']t', desc = 'todo comment' }, { ']T', desc = 'matching tag' }, { ']w', desc = 'warning' }, { ']%', desc = 'unmatched group' }, { '](', desc = '(' }, { ']<', desc = '<' }, { ']{', desc = '{' }, { ']', desc = 'location list item in next file' }, { ']', desc = 'trouble/quickfix item in next file' }, { ']', desc = 'tag in preview window' }, { ']', desc = 'add empty line below' }, { '!', desc = 'run program', icon = '' }, { '&', desc = 'repeat last :subsitute', icon = '󰛔' }, { '<', desc = 'indent decrease', icon = '󰘀' }, { '=', group = 'fmt with indentexpr', icon = '' }, { '>', desc = 'indent increase', icon = '󰘁' }, { '_', desc = 'first character of line', icon = '󰘀' }, { '', desc = 'move line up', icon = '' }, { '', desc = 'move line down', icon = '' }, { '', desc = 'increment (dial)', icon = '󰆵' }, { '', desc = 'clear & redraw', icon = { icon = '', color = 'red' }, }, { '', desc = 'decrement (dial)', icon = '󰆶' }, { '', desc = 'clear search highlight' }, }, { mode = { 'n', 'i', 'o' }, hidden = true, { '' }, { '' }, { '' }, { '' }, { '' }, { '' }, }, { mode = { 'n', 'x', 'o' }, hidden = true, { 'j' }, { 'k' }, { 'h' }, { 'l' }, { '' }, { 'xx' }, }, }, icons = { rules = { { pattern = 'start of line', icon = '󰘀' }, { pattern = 'end of line', icon = '󰘁' }, { pattern = 'prev[i]?[o]?[u]?[s]? word', icon = '' }, { pattern = 'next word', icon = '' }, { pattern = 'next end of word', icon = '' }, { pattern = 'move to next char', icon = '', color = 'green' }, { pattern = 'move to prev char', icon = '', color = 'green' }, { pattern = 'last line', icon = '󰘁' }, { pattern = 'move before next char', icon = '󰘀' }, { pattern = 'move before prev char', icon = '󰘁' }, { pattern = 'matching %(%){}%[%]', icon = '󰅪' }, { pattern = 'start of line %(non ws%)', icon = '󰘀' }, { pattern = 'prev empty line', icon = '' }, { pattern = 'next empty line', icon = '' }, { pattern = 'around', icon = '󰅪' }, { pattern = 'buffer', color = 'cyan' }, { pattern = 'change', icon = '', color = 'cyan' }, { pattern = 'comment', icon = '' }, { pattern = 'cut', icon = '', color = 'red' }, { pattern = 'delete', icon = '󰆴', color = 'red' }, { pattern = 'diagnostic', icon = '', hl = 'DiagnosticInfo' }, { pattern = 'error', icon = '', hl = 'DiagnosticError' }, { pattern = 'explorer', icon = '󰙅', color = 'yellow' }, { pattern = 'find', icon = '', color = 'green' }, { pattern = 'flash', icon = '󱐋', color = 'green' }, { pattern = 'fold', icon = '', color = 'purple' }, { pattern = 'format', icon = '󰉼', color = 'purple' }, { pattern = 'goto', icon = '', color = 'cyan' }, { pattern = 'hunk', color = 'orange' }, { pattern = 'inside', icon = '󰅩' }, { pattern = 'lazygit', icon = '', color = 'orange' }, { pattern = 'message', icon = '󰈸', color = 'orange' }, { pattern = 'notification', icon = '󰈸', color = 'orange' }, { pattern = 'registers', icon = '󰅍', color = 'yellow' }, { pattern = 'replace', icon = '', colors = 'blue' }, { pattern = 'session', icon = '', color = 'azure' }, { pattern = 'spell', icon = '', color = 'red' }, { pattern = 'subsitute', icon = '', color = 'green' }, { pattern = 'visual', icon = '', color = 'purple' }, { pattern = 'warning', icon = '', hl = 'DiagnosticWarn' }, { pattern = 'yank', icon = '', color = 'yellow' }, { pattern = 'prev ftFT', icon = '' }, { pattern = 'next ftFT', icon = '' }, }, }, replace = { desc = { { '%u%l', string.lower }, { 'prev ([wW][oO][rR][dD])', 'previous %1' }, { 'move to next char', 'find next character' }, { 'move to prev char', 'find previous character' }, { 'move before next char', 'move before character backwards' }, { 'move before prev char', 'move before character fowards' }, { 'prev ftFT', 'previous character match' }, { 'next ftFT', 'next character match' }, { 'start of line %(non ws%)', 'first character of line' }, { 'prev empty line', 'previous empty line' }, { 'goto %S+ start @parameter.inner', 'parameter start (inner)' }, { 'goto %S+ end @parameter.inner', 'parameter end (inner)' }, { 'goto %S+ start @class.outer', 'class start (outer)' }, { 'goto %S+ end @class.outer', 'class end (outer)' }, { 'goto %S+ start @function.outer', 'function start (outer)' }, { 'goto %S+ end @function.outer', 'function end (outer)' }, }, }, }, }, }