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 function map(mode, lhs, rhs, opts) local options = {noremap = true, silent = true} if opts then options = vim.tbl_extend("force", options, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, options) end local opt = {} -- Set leader -- if O.leader_key == ' ' or O.leader_key == 'space' then map('n', '', '', opt) -- vim.api.nvim_set_keymap('n', '', '', -- {noremap = true, silent = true}) vim.g.mapleader = ' ' -- else -- vim.api.nvim_set_keymap('n', O.leader_key, '', -- {noremap = true, silent = true}) -- vim.g.mapleader = O.leader_key -- end 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 } -- cycle tabs map("n", "n", [[BufferLineCycleNext]], opt) map("n", "p", [[BufferLineLineCyclePrev]], opt) -- Truezen.nvim map("n", "z", ":TZAtaraxis", opt) map("n", "m", ":TZMinimalist", opt) map("n", "j", ":TZFocus", opt) -- no hl vim.api.nvim_set_keymap('n', 'h', ':let @/=""', {noremap = true, silent = true}) -- explorer map("n", "e", ":NvimTreeToggle", opt) -- TODO this introduces some bugs unfortunately -- vim.api.nvim_set_keymap('n', 'e', -- ":lua require'lv-nvimtree'.toggle_tree()", -- {noremap = true, silent = true}) -- vim.api.nvim_set_keymap('n', 'e', -- ":NvimTreeToggle", -- {noremap = true, silent = true}) -- telescope or snap -- if O.plugin.snap.active then -- vim.api.nvim_set_keymap('n', 'f', ':Snap find_files', -- {noremap = true, silent = true}) -- else vim.api.nvim_set_keymap('n', 'f', ':Telescope find_files', {noremap = true, silent = true}) -- end -- dashboard vim.api.nvim_set_keymap('n', ';', ':Dashboard', {noremap = true, silent = true}) -- Comments map("v", "/", ":CommentToggle", opt) -- dashboard map("n", ";", [[ Dashboard]], opt) -- TODO create entire treesitter section local mappings = { ["/"] = {":CommentToggle", "Comment"}, [''] = {'', 'alternate file'}, -- ["e"] = "Explorer", -- -- ["c"]= {":BufferClose", "Close Buffer"}, ["f"] = "Find File", ["h"] = "No Highlight", ['\\'] = { ':vnew', 'vsplit'}, ['-'] = { ':new', 'hsplit'}, b = { name = "Buffers", j = {"BufferLinePick", "jump to buffer"}, -- f = {O.plugin.snap.active and "Snap buffers" or "Telescope buffers", "Find buffer"}, f = {"Telescope buffers", "Find buffer"}, w = {"BufferLineWipeout", "wipeout buffer"}, h = {"BufferLineCloseBuffersLeft", "close all buffers to the left"}, l = { "BufferLineCloseBuffersRight", "close all BufferLines to the right" }, D = { "BufferLineOrderByDirectory", "sort BufferLines automatically by directory" }, L = { "BufferLineOrderByLanguage", "sort BufferLines automatically by language" } }, d = { name = 'Debug', e = {':call vimspector#Reset()', 'exit debug mode'}, l = {':call vimspector#StepInto()', 'step into'}, j = {':call vimspector#StepOver()', 'step over'}, h = {':call vimspector#StepOut()', 'step out'}, k = {':call vimspector#Restart()', 'restart debugging'}, c = {':call vimspector#Continue()', 'continue'}, r = {':call vimspector#RunToCursor()', 'run to cursor'}, d = {':call vimspector#Launch()', 'Launch'}, b = {':call vimspector#ToggleBreakpoint()', 'toggle breakpoint'}, B = {'VimspectorToggleConditionalBreakpoint', 'toggle breakpoint'}, C = {':call vimspector#ClearBreakpoints()', 'clear breakpoints'}, i = {'VimspectorBalloonEval', 'inspect'}, }, -- diagnostics vanilla nvim -- -- diagnostic -- function lv_utils.get_all() -- vim.lsp.diagnostic.get_all() -- end -- function lv_utils.get_next() -- vim.lsp.diagnostic.get_next() -- end -- function lv_utils.get_prev() -- vim.lsp.diagnostic.get_prev() -- end -- function lv_utils.goto_next() -- vim.lsp.diagnostic.goto_next() -- end -- function lv_utils.goto_prev() -- vim.lsp.diagnostic.goto_prev() -- end -- function lv_utils.show_line_diagnostics() -- vim.lsp.diagnostic.show_line_diagnostics() -- end -- " Available Debug Adapters: -- " https://microsoft.github.io/debug-adapter-protocol/implementors/adapters/ -- " Adapter configuration and installation instructions: -- " https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation -- " Debug Adapter protocol: -- " https://microsoft.github.io/debug-adapter-protocol/ -- " Debugging -- command! DebugToggleBreakpoint lua require'dap'.toggle_breakpoint() -- command! DebugStart lua require'dap'.continue() -- command! DebugContinue lua require'dap'.continue() -- command! DebugStepOver lua require'dap'.step_over() -- command! DebugStepOut lua require'dap'.step_out() -- command! DebugStepInto lua require'dap'.step_into() -- command! DebugToggleRepl lua require'dap'.repl.toggle() -- command! DebugGetSession lua require'dap'.session() -- 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 = {"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"}, 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 = {"lua vim.lsp.buf.formatting()", "Format"}, h = {"Lspsaga hover_doc", "Hover Doc"}, i = {"LspInfo", "Info"}, j = {"Lspsaga diagnostic_jump_prev", "Prev Diagnostic"}, k = {"Lspsaga diagnostic_jump_next", "Next Diagnostic"}, 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 = {O.plugin.symbol_outline.active and "SymbolsOutline" or -- " 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"}, -- d = { -- "Telescope lsp_document_diagnostics", -- "Document Diagnostics" -- }, -- D = { -- "Telescope lsp_workspace_diagnostics", -- "Workspace Diagnostics" -- }, f = {"Telescope find_files", "Find File"}, -- f = {O.plugin.snap.active and "Snap find_files" or "Telescope find_files", "Find File"}, h = {"Telescope help_tags", "Find Help"}, -- m = {"Telescope marks", "Marks"}, M = {"Telescope man_pages", "Man Pages"}, r = {"Telescope oldfiles", "Open Recent File"}, -- r = {O.plugin.snap.active and "Snap oldfiles" or "Telescope oldfiles", "Open Recent File"}, R = {"Telescope registers", "Registers"}, t = {"Telescope live_grep", "Text"} -- t = {O.plugin.snap.active and "Snap live_grep" or "Telescope live_grep", "Text"} }, S = { name = "Session", s = {"SessionSave", "Save Session"}, l = {"SessionLoad", "Load Session"} }, T = { name = "Treesitter", i = {":TSConfigInfo", "Info"} } } -- if O.plugin.spectre.active then -- mappings['r'] = { -- name = "Replace", -- f = { -- "lua require('spectre').open_file_search()", "Current File" -- }, -- p = {"lua require('spectre').open()", "Project"} -- } -- end -- -- if O.plugin.trouble.active then -- mappings['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"} -- } -- end -- -- if O.plugin.gitlinker.active then mappings["gy"] = "Gitlink" end -- -- if O.plugin.ts_playground.active then -- vim.api.nvim_set_keymap("n", "Th", -- ":TSHighlightCapturesUnderCursor", -- {noremap = true, silent = true}) -- mappings[""] = "Highlight Capture" -- end -- -- if O.plugin.zen.active then -- vim.api.nvim_set_keymap("n", "z", ":ZenMode", -- {noremap = true, silent = true}) -- mappings["z"] = "Zen" -- end -- if O.plugin.lazygit.active then -- vim.api.nvim_set_keymap("n", "gg", ":LazyGit", -- {noremap = true, silent = true}) -- mappings["gg"] = "LazyGit" -- end -- if O.plugin.telescope_project.active then -- -- open projects -- vim.api.nvim_set_keymap('n', 'p', -- ":lua require'telescope'.extensions.project.project{}", -- {noremap = true, silent = true}) -- mappings["p"] = "Projects" -- end -- -- -- [";"] = "Dashboard", -- -- if O.lang.latex.active then -- mappings["L"] = { -- name = "+Latex", -- c = {"VimtexCompile", "Toggle Compilation Mode"}, -- f = {"call vimtex#fzf#run()", "Fzf Find"}, -- i = {"VimtexInfo", "Project Information"}, -- s = {"VimtexStop", "Stop Project Compilation"}, -- t = {"VimtexTocToggle", "Toggle Table Of Content"}, -- v = {"VimtexView", "View PDF"} -- } -- end -- -- if O.lushmode then -- mappings["L"] = { -- name = "+Lush", -- l = {":Lushify", "Lushify"}, -- x = {":lua require('lush').export_to_buffer(require('lush_theme.cool_name'))", "Lush Export"}, -- t = {":LushRunTutorial", "Lush Tutorial"}, -- q = {":LushRunQuickstart", "Lush Quickstart"} -- } -- end local wk = require("which-key") wk.register(mappings, opts)