local status_ok, which_key = pcall(require, 'which-key') if not status_ok then return end local setup = { plugins = { marks = true, -- shows a list of your marks on ' and ` registers = true, -- shows your registers on ' in NORMAL or in INSERT mode spelling = { enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions suggestions = 20, -- how many suggestions should be shown in the list? }, -- the presets plugin, adds help for a bunch of default keybindings in Neovim -- No actual key bindings are created presets = { operators = false, -- adds help for operators like d, y, ... and registers them for motion / text object completion motions = true, -- adds help for motions text_objects = true, -- help for text objects triggered after entering an operator windows = true, -- default bindings on nav = true, -- misc bindings to work with windows z = true, -- bindings for folds, spelling and others prefixed with z g = true, -- bindings for prefixed with g }, }, -- add operators that will trigger motion and text object completion -- to enable all native operators, set the preset / operators plugin above -- operators = { gc = 'Comments' }, key_labels = { -- override the label used to display some keys. It doesn't effect WK in any other way. -- For example: -- [''] = 'SPC', -- [''] = 'RET', -- [''] = 'TAB', }, icons = { breadcrumb = '»', -- symbol used in the command line area that shows your active key combo separator = '➜', -- symbol used between a key and it's label group = '+', -- symbol prepended to a group }, popup_mappings = { scroll_down = '', -- binding to scroll down inside the popup scroll_up = '', -- binding to scroll up inside the popup }, window = { border = 'rounded', -- none, single, double, shadow position = 'bottom', -- bottom, top margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left] padding = { 2, 2, 2, 2 }, -- extra window padding [top, right, bottom, left] winblend = 0, }, layout = { height = { min = 4, max = 25 }, -- min and max height of the columns width = { min = 20, max = 50 }, -- min and max width of the columns spacing = 3, -- spacing between columns align = 'left', -- align columns left, center or right }, ignore_missing = true, -- enable this to hide mappings for which you didn't specify a label hidden = { '', '', '', '', 'call', 'lua', '^:', '^ ' }, -- hide mapping boilerplate show_help = true, -- show help message on the command line when the popup is visible triggers = 'auto', -- automatically setup triggers -- triggers = {''} -- or specify a list manually triggers_blacklist = { -- list of mode / prefixes that should never be hooked by WhichKey -- this is mostly relevant for key maps that start with a native binding -- most people should not need to change this i = { 'j', 'k' }, v = { 'j', 'k' }, }, } local opts = { mode = 'n', -- NORMAL mode prefix = '', buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings silent = true, -- use `silent` when creating keymaps noremap = true, -- use `noremap` when creating keymaps nowait = true, -- use `nowait` when creating keymaps } local mappings = { ['a'] = { 'Alpha', 'Alpha' }, ['b'] = { 'lua require("telescope.builtin").buffers(require"telescope.themes").get_dropdown{previewer = false})', 'Buffers', }, ['e'] = { 'NvimTreeToggle', 'Explorer' }, ['w'] = { 'w!', 'Save' }, ['q'] = { 'q!', 'Quit' }, ['c'] = { 'Bdelete!', 'Close Buffer' }, ['h'] = { 'nohlsearch', 'No Highlight' }, ['f'] = { 'lua require("telescope.builtin").find_files(require("telescope.themes").get_dropdown{previewer = false})', 'Find files', }, ['F'] = { 'Telescope live_grep theme=ivy', 'Find Text' }, ['P'] = { 'lua require("telescope").extensions.projects.projects()', 'Projects' }, p = { name = 'Packer', c = { 'PackerCompile', 'Compile' }, i = { 'PackerInstall', 'Install' }, s = { 'PackerSync', 'Sync' }, S = { 'PackerStatus', 'Status' }, u = { 'PackerUpdate', 'Update' }, }, g = { name = 'Git', g = { 'lua _LAZYGIT_TOGGLE()', 'Lazygit' }, j = { 'lua require "gitsigns".next_hunk()', 'Next Hunk' }, k = { 'lua require "gitsigns".prev_hunk()', 'Prev Hunk' }, l = { 'lua require "gitsigns".blame_line()', 'Blame' }, p = { 'lua require "gitsigns".preview_hunk()', 'Preview Hunk' }, r = { 'lua require "gitsigns".reset_hunk()', 'Reset Hunk' }, R = { 'lua require "gitsigns".reset_buffer()', 'Reset Buffer' }, s = { 'lua require "gitsigns".stage_hunk()', 'Stage Hunk' }, u = { 'lua require "gitsigns".undo_stage_hunk()', 'Undo Stage Hunk', }, o = { 'Telescope git_status', 'Open changed file' }, b = { 'Telescope git_branches', 'Checkout branch' }, c = { 'Telescope git_commits', 'Checkout commit' }, d = { 'Gitsigns diffthis HEAD', 'Diff', }, }, l = { name = 'LSP', a = { 'lua vim.lsp.buf.code_action()', 'Code Action' }, d = { 'Telescope lsp_document_diagnostics', 'Document Diagnostics', }, w = { 'Telescope lsp_workspace_diagnostics', 'Workspace Diagnostics', }, f = { 'lua vim.lsp.buf.format{async=true}', 'Format' }, i = { 'LspInfo', 'Info' }, I = { 'LspInstallInfo', 'Installer Info' }, j = { 'lua vim.lsp.diagnostic.goto_next()', 'Next Diagnostic', }, k = { 'lua vim.lsp.diagnostic.goto_prev()', 'Prev Diagnostic', }, l = { 'lua vim.lsp.codelens.run()', 'CodeLens Action' }, q = { 'lua vim.lsp.diagnostic.set_loclist()', 'Quickfix' }, r = { 'lua vim.lsp.buf.rename()', 'Rename' }, s = { 'Telescope lsp_document_symbols', 'Document Symbols' }, S = { 'Telescope lsp_dynamic_workspace_symbols', 'Workspace Symbols', }, }, s = { name = 'Search', b = { 'Telescope git_branches', 'Checkout branch' }, c = { 'Telescope colorscheme', 'Colorscheme' }, h = { 'Telescope help_tags', 'Find Help' }, M = { 'Telescope man_pages', 'Man Pages' }, r = { 'Telescope oldfiles', 'Open Recent File' }, R = { 'Telescope registers', 'Registers' }, k = { 'Telescope keymaps', 'Keymaps' }, C = { 'Telescope commands', 'Commands' }, }, t = { name = 'Terminal', n = { 'lua _NODE_TOGGLE()', 'Node' }, u = { 'lua _NCDU_TOGGLE()', 'NCDU' }, t = { 'lua _HTOP_TOGGLE()', 'Htop' }, p = { 'lua _PYTHON_TOGGLE()', 'Python' }, f = { 'ToggleTerm direction=float', 'Float' }, h = { 'ToggleTerm size=10 direction=horizontal', 'Horizontal' }, v = { 'ToggleTerm size=80 direction=vertical', 'Vertical' }, }, } which_key.setup(setup) which_key.register(mappings, opts)