require("which-key").setup { plugins = { marks = true, -- shows a list of your marks on ' and ` registers = true, -- shows your registers on " in NORMAL or in INSERT mode -- 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, ... motions = false, -- adds help for motions text_objects = false, -- 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 } }, 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 }, window = { border = "single", -- 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] }, 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 }, hidden = {"", "", "", "", "call", "lua", "^:", "^ "}, -- hide mapping boilerplate show_help = true -- show help message on the command line when the popup is visible } 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 = false -- use `nowait` when creating keymaps } -- Set leader vim.api.nvim_set_keymap('n', '', '', {noremap = true, silent = true}) vim.g.mapleader = ' ' -- no hl vim.api.nvim_set_keymap('n', 'h', ':let @/=""', {noremap = true, silent = true}) -- explorer vim.api.nvim_set_keymap('n', 'e', ":lua require'lv-nvimtree'.toggle_tree()", {noremap = true, silent = true}) -- telescope vim.api.nvim_set_keymap('n', 'f', ':Telescope find_files', {noremap = true, silent = true}) -- dashboard vim.api.nvim_set_keymap('n', ';', ':Dashboard', {noremap = true, silent = true}) -- Comments vim.api.nvim_set_keymap("n", "/", ":CommentToggle", {noremap = true, silent = true}) vim.api.nvim_set_keymap("v", "/", ":CommentToggle", {noremap = true, silent = true}) -- close buffer vim.api.nvim_set_keymap("n", "c", ":BufferClose", {noremap = true, silent = true}) -- open projects vim.api.nvim_set_keymap('n', 'p', ":lua require'telescope'.extensions.project.project{}", {noremap = true, silent = true}) -- TODO create entire treesitter section local mappings = { ["/"] = "Comment", ["c"] = "Close Buffer", ["e"] = "Explorer", ["f"] = "Find File", ["h"] = "No Highlight", ["p"] = "Projects", b = { name = "+Buffers", j = {"BufferPick", "jump to buffer"}, w = {"BufferWipeout", "wipeout buffer"}, e = {"BufferCloseAllButCurrent", "close all but current buffer"}, h = {"BufferCloseBuffersLeft", "close all buffers to the left"}, l = {"BufferCloseBuffersRight", "close all BufferLines to the right"}, D = {"BufferOrderByDirectory", "sort BufferLines automatically by directory"}, L = {"BufferOrderByLanguage", "sort BufferLines automatically by language"}, }, ["/"] = {"CommentToggle", "Comment"}, [";"] = {"Dashboard", "Dashboard"}, ["c"] = {"BufferClose", "Close Buffer"}, ["e"] = {"NvimTreeToggle", "Explorer"}, ["f"] = {"Telescope find_files", "Find File"}, ["h"] = {"set hlsearch!", "No Highlight"}, ["p"] = {"lua require'telescope'.extensions.project.project{}", "Projects"}, d = { name = "Diagnostics", t = {"TroubleToggle", "trouble"}, w = {"TroubleToggle lsp_workspace_diagnostics", "workspace"}, d = {"TroubleToggle lsp_document_diagnostics", "document"}, q = {"TroubleToggle quickfix", "quickfix"}, l = {"TroubleToggle loclist", "loclist"}, r = {"TroubleToggle lsp_references", "references"} }, D = { name = "Debug", b = {"DebugToggleBreakpoint", "Toggle Breakpoint"}, c = {"DebugContinue", "Continue"}, i = {"DebugStepInto", "Step Into"}, o = {"DebugStepOver", "Step Over"}, r = {"DebugToggleRepl", "Toggle Repl"}, s = {"DebugStart", "Start"} }, g = { name = "Git", j = {"NextHunk", "Next Hunk"}, k = {"PrevHunk", "Prev Hunk"}, p = {"PreviewHunk", "Preview Hunk"}, r = {"ResetHunk", "Reset Hunk"}, R = {"ResetBuffer", "Reset Buffer"}, s = {"StageHunk", "Stage Hunk"}, u = {"UndoStageHunk", "Undo Stage Hunk"}, o = {"Telescope git_status", "Open changed file"}, b = {"Telescope git_branches", "Checkout branch"}, c = {"Telescope git_commits", "Checkout commit"}, C = {"Telescope git_bcommits", "Checkout commit(for current file)"} }, l = { name = "LSP", a = {"Lspsaga code_action", "Code Action"}, A = {"Lspsaga range_code_action", "Selected Action"}, d = {"Telescope lsp_document_diagnostics", "Document Diagnostics"}, D = {"Telescope lsp_workspace_diagnostics", "Workspace Diagnostics"}, f = {"LspFormatting", "Format"}, i = {"LspInfo", "Info"}, l = {"Lspsaga lsp_finder", "LSP Finder"}, L = {"Lspsaga show_line_diagnostics", "Line Diagnostics"}, p = {"Lspsaga preview_definition", "Preview Definition"}, q = {"Telescope quickfix", "Quickfix"}, r = {"Lspsaga rename", "Rename"}, t = {"LspTypeDefinition", "Type Definition"}, x = {"cclose", "Close Quickfix"}, s = {"Telescope lsp_document_symbols", "Document Symbols"}, S = {"Telescope lsp_dynamic_workspace_symbols", "Workspace Symbols"} }, r = { name = "Replace", f = {"lua require('spectre').open_file_search()", "Current File"}, p = {"lua require('spectre').open()", "Project"} }, s = { name = "Search", b = {"Telescope git_branches", "Checkout branch"}, c = {"Telescope colorscheme", "Colorscheme"}, d = {"Telescope lsp_document_diagnostics", "Document Diagnostics"}, D = {"Telescope lsp_workspace_diagnostics", "Workspace Diagnostics"}, f = {"Telescope find_files", "Find File"}, m = {"Telescope marks", "Marks"}, M = {"Telescope man_pages", "Man Pages"}, r = {"Telescope oldfiles", "Open Recent File"}, R = {"Telescope registers", "Registers"}, t = {"Telescope live_grep", "Text"} }, S = { name = "Session", s = {"SessionSave", "Save Session"}, l = {"SessionLoad", "Load Session"} }, -- extras z = { name = "Zen", s = {"TZBottom", "toggle status line"}, t = {"TZTop", "toggle tab bar"}, z = {"TZAtaraxis", "toggle zen"} } } local visualOpts = { mode = "v", -- Visual 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 = false -- use `nowait` when creating keymaps } local visualMappings = { ["/"] = {"CommentToggle", "Comment"}, r = { name = "Replace", f = {"lua require('spectre').open_visual({path = vim.fn.expand('%')})", "File"}, p = {"lua require('spectre').open_visual()", "Project"} } } local wk = require("which-key") wk.register(mappings, opts) wk.register(visualMappings, visualOpts)