-- if not package.loaded['which-key'] then -- return -- end local status_ok, which_key = pcall(require, "which-key") if not status_ok then return end 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 } -- Set leader if O.leader_key == " " or O.leader_key == "space" then 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 } -- no hl vim.api.nvim_set_keymap("n", "n", ':let @/=""', { noremap = true, silent = true }) -- explorer vim.api.nvim_set_keymap( "n", "e", ":lua require'cfg.nvimtree'.toggle_tree()", { noremap = true, silent = true } ) 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", "k", ":CommentToggle", { noremap = true, silent = true }) vim.api.nvim_set_keymap("v", "k", ":CommentToggle", { noremap = true, silent = true }) -- split window vim.api.nvim_set_keymap("n", "v", ":vsplit", {noremap = true, silent = true}) vim.api.nvim_set_keymap("n", "h", ":split", {noremap = true, silent = true}) -- close buffer vim.api.nvim_set_keymap("n", "c", ":BufferClose", { noremap = true, silent = true }) -- open config vim.api.nvim_set_keymap( "n", ".", ":e " .. CONFIG_PATH .. "/config.lua", { noremap = true, silent = true } ) local mappings = { ["."] = "LunarConfig", ["k"] = "Comment", ["c"] = "Close Buffer", ["e"] = "Explorer", ["f"] = "Find File", ["n"] = "No Highlight", [";"] = "Dashboard", ["v"] = "Vertical Split", ["h"] = "Horizontal Split", b = { name = "Buffers", j = { "BufferPick", "jump to buffer" }, f = { "Telescope buffers", "Find 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", }, }, p = { name = "Packer", c = { "PackerCompile", "Compile" }, i = { "PackerInstall", "Install" }, r = { "lua require('cfg.utils').reload_config()", "Reload" }, s = { "PackerSync", "Sync" }, u = { "PackerUpdate", "Update" }, }, 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 = { "lua vim.lsp.buf.code_action()", "Code Action" }, d = { "Telescope lsp_document_diagnostics", "Document Diagnostics", }, w = { "Telescope lsp_workspace_diagnostics", "Workspace Diagnostics", }, f = { "Neoformat", "Format" }, i = { "LspInfo", "Info" }, j = { "lua vim.lsp.diagnostic.goto_next({popup_opts = {border = O.lsp.popup_border}})", "Next Diagnostic" }, k = { "lua vim.lsp.diagnostic.goto_prev({popup_opts = {border = O.lsp.popup_border}})", "Prev Diagnostic" }, q = { "Telescope quickfix", "Quickfix" }, r = { "lua vim.lsp.buf.rename()", "Rename" }, 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" }, f = { "Telescope find_files", "Find File" }, h = { "Telescope help_tags", "Find Help" }, 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" }, }, T = { name = "Treesitter", i = { ":TSConfigInfo", "Info" }, }, } if O.plugin.symbol_outline.active then vim.api.nvim_set_keymap("n", "o", ":SymbolsOutline", { noremap = true, silent = true }) mappings["o"] = "Symbols outline" 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.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 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 -- for _, v in pairs(O.user_which_key) do -- end for k, v in pairs(O.user_which_key) do mappings[k] = v -- table.insert(mappings, O.user_which_key[1]) -- print(k) -- print(v) end local wk = require "which-key" wk.register(mappings, opts)