return { { "folke/which-key.nvim", event = "BufEnter", config = function() local whichkey = require("which-key") whichkey.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 = true, -- 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 }, }, key_labels = { -- override the label used to display some keys. It doesn't effect WK in any other way. [""] = "SPC", }, 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 = "center", -- 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 = false, -- show help message on the command line when the popup is visible 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 leader_opts = { mode = { "n", "v" }, -- NORMAL/VISUAL mode buffer = nil, -- Global mappings prefix = "", silent = true, -- use 'silent' noremap = true, -- use 'noremap' nowait = true, -- use 'nowait' } whichkey.register({ mode = { "n", "v" }, ["g"] = { name = "+goto" }, ["m"] = { name = "+harpoon" }, }) local leader_mappings = { l = { name = "+lsp" }, b = { name = "+buffer" }, r = { name = "+replace" }, f = { name = "+file" }, s = { name = "+search" }, h = { name = "+help" }, g = { name = "+git" }, t = { name = "+todo" }, N = { name = "+noice" }, o = { name = "+option" }, H = { "split", "split" }, V = { "vsplit", "vsplit" }, n = { "NvimTreeToggle", "Explorer" }, P = { "!opout %", "Preview Document" }, q = { 'lua require("lazyvim.functions").smart_quit()', "Quit" }, w = { "w", "Write" }, z = { "ZenMode", "Zen" }, ["'"] = { "close", "Close split" }, u = { "UndotreeToggle", "Undo Tree" }, C = { name = "Compiler", c = { "w! | !compiler %", "Compile File" }, b = { "w! | !pandoc % -t beamer -o presentation.pdf", "Beamer Presentation" }, }, -- o = { -- name = "Options", -- c = { "lua vim.g.cmp_active=false", "Completion off" }, -- C = { "lua vim.g.cmp_active=true", "Completion on" }, -- w = { 'lua require("user.functions").toggle_option("wrap")', "Wrap" }, -- r = { 'lua require("user.functions").toggle_option("relativenumber")', "Relative" }, -- l = { 'lua require("user.functions").toggle_option("cursorline")', "Cursorline" }, -- s = { 'lua require("user.functions").toggle_option("spell")', "Spell" }, -- t = { 'lua require("user.functions").toggle_tabline()', "Tabline" }, -- }, -- d = { -- name = "Debug", -- b = { "lua require'dap'.toggle_breakpoint()", "Breakpoint" }, -- c = { "lua require'dap'.continue()", "Continue" }, -- i = { "lua require'dap'.step_into()", "Into" }, -- o = { "lua require'dap'.step_over()", "Over" }, -- O = { "lua require'dap'.step_out()", "Out" }, -- r = { "lua require'dap'.repl.toggle()", "Repl" }, -- l = { "lua require'dap'.run_last()", "Last" }, -- u = { "lua require'dapui'.toggle()", "UI" }, -- x = { "lua require'dap'.terminate()", "Exit" }, -- }, } whichkey.register(leader_mappings, leader_opts) end, }, }