-- https://github.com/folke/which-key.nvim local which_key = require("which-key") local mappings = { b = { "Telescope buffers", "Buffers" }, c = { "lua vim.lsp.buf.code_action()", "Code Action" }, d = { "TroubleToggle", "Diagnostics" }, e = { "NvimTreeToggle", "Explorer" }, f = { "Telescope current_buffer_fuzzy_find", "Find Files" }, h = { "nohlsearch", "No Highlight" }, i = { "silent !open -a iA\\ Writer.app '%:p'", "iA Writer" }, j = { "b#", "Toggle Buffers" }, o = { "SymbolsOutline", "Symbols Outline" }, p = { "Telescope projects", "Projects" }, q = { "Bdelete!", "Close Buffer" }, s = { "lua require('spectre').open_file_search()", "Spectre", }, t = { "TodoTelescope", "Todo" }, v = { "lua require('export-to-vscode').launch()", "Visual Studio Code" }, w = { "w!", "Save" }, x = { name = "Text Editing", c = { "call ToggleColorColumn()", "Show/Hide Colorcolumn" }, d = { "call SpellEn()", "Set Spelling Language to English" }, e = { "call SpellDe()", "Set Spelling Languate to German" }, l = { "set list!", "List" }, m = { "MarkdownPreviewToggle", "Markdown Preview" }, s = { "set spell!", "Spell Checking" }, w = { "call ToggleWrap()", "Soft wrap/No wrap" }, }, z = { "ZenMode", "Zen Mode" }, A = { "Alpha", "Alpha" }, B = { name = "Bufferline", p = { "BufferLinePick", "Pick" }, x = { "BufferLinePickClose", "Pick to Close" }, }, E = { name = "Explorer", a = { "NvimTreeFocus", "Focus" }, c = { "NvimTreeCollapse", "Collapse Folders" }, f = { "NvimTreeFindFile", "Find File" }, r = { "NvimTreeRefresh", "Refresh" }, }, F = { "Telescope live_grep", "Find Text" }, G = { name = "Git & GitHub", b = { "BlamerToggle", "Blame Line" }, g = { "GBInteractive", "Git Blame in GitHub" }, h = { "GHInteractive", "Open in GitHub" }, }, L = { name = "LSP, FZF & Telescope", L = { name = "LSP", a = { "lua vim.lsp.buf.add_workspace_folder()", "Add Workspace" }, c = { "lua vim.lsp.buf.code_action()", "LSP Code Action" }, d = { "Telescope lsp_definitions", "LSP Definitions" }, l = { "lua vim.diagnostic.setloclist", "Set Loclist" }, r = { "Telescope lsp_references", "LSP References" }, s = { "Telescope lsp_document_symbols", "LSP Document Symbols" }, t = { "Telescope lsp_type_definitions", "LSP Type Definition" }, v = { "lua vim.lsp.buf.remove_workspace_folder()", "Remove Workspace" }, w = { "Telescope lsp_workspace_symbols", "LSP Live Workspace Symbols" }, }, F = { name = "FZF", b = { "FzfLua blines", "Bufferlines" }, f = { "FzfLua files", "Files" }, h = { "FzfLua oldfiles", "Open Files History" }, i = { "FzfLua spell_suggest", "Spelling Suggestions" }, m = { "FzfLua marks", "Marks" }, o = { "FzfLua lines", "Open Buffer Lines" }, q = { "FzfLua quickfix", "Quickfix" }, r = { "FzfLua resume", "Resume last command" }, t = { "FzfLua tabs", "Tabs" }, g = { name = "Git", b = { "FzfLua git_branches", "Git Branches" }, c = { "FzfLua git_commits", "Git Commits" }, s = { "FzfLua git_stash", "Git Stashes" }, t = { "FzfLua git_status", "Git Status" }, }, s = { name = "Search", s = { "FzfLua grep", "Grep Search" }, i = { "FzfLua live_grep", "Live Grep" }, l = { "FzfLua grep_last", "Last Grep Search" }, r = { "FzfLua live_grep_resume", "Resume Last Search" }, c = { "FzfLua grep_cword", "Search Word Under Cursor" }, v = { "FzfLua grep_visual", "Search Visual Selection" }, p = { "FzfLua grep_project", "Grep Search in Project" }, }, }, T = { name = "Telescope", b = { "Telescope bookmarks", "Browser Bookmarks" }, f = { name = "Find", s = { "Telescope find_files", "Find Files" }, a = { "Telescope find_files hidden=true", "Find all files" }, f = { "Telescope file_browser", "File Browser" }, l = { "Telescope live_grep", "Live Grep" }, }, g = { name = "Git", b = { "Telescope git_branches", "Git Branches" }, s = { "Telescope git_status", "Git Status" }, }, h = { "Telescope help_tags", "Help Tags" }, k = { "Telescope keymaps", "Keymaps" }, m = { "Telescope marks", "Marks" }, n = { "Telescope node_modules list", "Node Modules" }, p = { "Telescope projects", "Projects" }, r = { "Telescope resume", "Resume last search" }, t = { "Telescope tags", "Tags" }, u = { "Telescope frecency", "MRU (Frequency)" }, }, }, P = { "Pounce", "Pounce" }, Q = { "q!", "Quit" }, R = { "lua vim.lsp.buf.rename()", "Rename" }, S = { "lua require('spectre').open_visual({select_word=true})", "Spectre Current Word" }, T = { name = "Terminal", f = { "ToggleTerm direction=float", "Float" }, g = { "lua _TIG_TOGGLE()", "TIG" }, h = { "ToggleTerm size=10 direction=horizontal", "Horizontal" }, l = { "lua _LAZYGIT_TOGGLE()", "LazyGit" }, n = { "lua _NODE plugin_TOGGLE()", "Node" }, p = { "lua _PYTHON_TOGGLE()", "Python" }, t = { "lua _HTOP_TOGGLE()", "Htop" }, u = { "lua _NCDU_TOGGLE()", "NCDU" }, v = { "ToggleTerm size=80 direction=vertical", "Vertical" }, }, V = { name = "Vimux", p = { "VimuxPromptCommand", "Run Prompt Command" }, l = { "VimuxRunLastCommand", "Run Last Command" }, t = { "VimuxTogglePane", "Toggle Pane" }, j = { "RunJest", "Run Jest" }, b = { "RunJestOnBuffer", "Run Jest on Buffer" }, f = { "RunJestFocused", "Run Jest on Focused" }, }, W = { "wa!", "Save All" }, } 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 = 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 }, }, -- 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 vopts = { 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 = true, -- use `nowait` when creating keymaps } local vmappings = { ["/"] = { 'lua require("Comment.api").toggle_linewise_op(vim.fn.visualmode())', "Comment" }, } which_key.setup(setup) which_key.register(mappings, opts) which_key.register(vmappings, vopts)