-- This is a function called from the which-key plugin config return function () local keymap = vim.keymap local wk = require("which-key") -- { "", "command", desc="decription", mode="n" }, -- single command example wk.add({ -- Miscellaneous { "ii", "", desc="Exit insert mode with ii", mode="i" }, { "", "nohl", desc="Clear search highlights", mode="n" }, { "n", "o", desc="Add new line", mode="n" }, { "N", "O", desc="Add new line above", mode="n" }, { "+", "", desc="Increment number by 1", mode="n" }, { "-", "", desc="Decrement number by 1", mode="n" }, -- Miscellaneous { -- File saves and exits mode = { "n", "v" }, { "f", group="Saves and exits" }, { "fw", "w!", desc = "Save current file"}, {"fW", "wa!", desc = "Save all files"}, {"fq", "wq!", desc = "Save and exit current file"}, {"fQ", "wqa!", desc = "Save and exit all files"}, {"fx", "q!", desc = "Exit file without saving"}, {"fX", "q!", desc = "Exit session without saving"}, }, { -- Window management mode = {"n"}, { "w", group="Window management" }, { "wv", "v", desc="Split window vertically" }, { "wh", "s", desc="Split window horizontally" }, { "we", "=", desc="Make splits equal size" }, { "wx", "close", desc="Close current split" }, { "wt", "+", desc="Make split taller" }, { "ws", "-", desc="Make split shorter" }, { "wn", "<", desc="Decrease split width" }, { "ww", ">", desc="Increase split width" }, { "w", "", desc="Move to left split" }, { "w", "", desc="Move to top split" }, { "w", "", desc="Move to bottom split" }, { "w", "", desc="Move to right split" }, { "wm", "MaximizerToggle", desc="Maximize/minimize window" }, { "wR", "SessionRestore", desc="Restore session" }, { "wS", "SessionSave", desc="Save session" }, }, { -- Tab management mode = {"n"}, { "t", group="Tab management" }, { "to", "tabnew", desc="Open new tab" }, { "tx", "tabclose", desc="Close current tab" }, { "tn", "tabn", desc="Go to next tab" }, { "tp", "tabp", desc="Go to prev tab" }, { "tb", "tabnew %", desc="Open currtent buffer in new tab" }, }, { -- Quickfix mode = {"n"}, { "q", group="Quickfix" }, { "qo", "copen", desc="Open quickfix list" }, { "qf", "cfirst", desc="Jump to first quickfix list item" }, { "qn", "cnext", desc="Jump to next quickfix list item" }, { "qp", "cprev", desc="Jump to prev quickfix list item" }, { "ql", "clast", desc="Jump to last quickfix list item" }, { "qc", "cclose", desc="Close quickfix list" }, }, { -- Neotree mode = {"n"}, { "e", group="File tree" }, { "ee", "Neotree toggle filesystem reveal left", desc="Toggle file tree" }, { "ef", "Neotree focus", desc="Focus to file tree" }, }, { -- Telescope mode = {"n"}, { "s", group="Search" }, { "sf", "Telescope find_files", desc="Search files" }, { "sg", "Telescope live_grep", desc="Search word (livegrep)" }, { "sb", "Telescope buffers", desc="Search buffers" }, { "sh", "Telescope help_tags", desc="Search help" }, { "sk", "Telescope keymaps", desc="Search keymaps" }, { "sw", "Telescope current_buffer_fuzzy_find", desc="Fuzzy search current buffer" }, { "ss", "Telescope lsp_document_symbols", desc="Search LSP symbols (current buffer)" }, { "sp", "Telescope builtin", desc="Select a telescope picker and run it" }, { "st", function () require("telescope.builtin").treesitter({ default_text = "" }) end, desc="Telescope treesitter" }, { "C", "Telescope colorscheme", desc="Change colorscheme" }, }, { -- Language server mode = {"n"}, { "c", group="LSP & Code actions"}, { "cc", "lua vim.lsp.buf.completion()", desc="Toggle LSP completion" }, { "ch", "lua vim.lsp.buf.hover()", desc="Toggle LSP hover (documentation)" }, { "cd", "lua vim.lsp.buf.definition()", desc="Go to definition" }, { "cD", "lua vim.lsp.buf.declaration()", desc="Go to declaration" }, { "ci", "Telescope lsp_implementations", desc="Show LSP implementations" }, { "ct", "Telescope lsp_type_definitions", desc="Show LSP type definitions" }, { "cy", "AerialToggle", desc="Toggle aerial symbols list" }, { "cR", "Telescope lsp_references", desc="List all references of symbol" }, { "cs", "lua vim.lsp.buf.signature_help()", desc="Display signature info under cursor" }, { "cr", "lua vim.lsp.buf.rename()", desc="Rename" }, { "cf", "lua vim.lsp.buf.format()", desc="Format current buffer" }, { "cl", function () require("lint").try_lint() end, desc="Trigger linting for current buffer" }, { "ca", "lua vim.lsp.buf.code_action()", desc="Code actions" }, { "cL", "LspRestart", desc="Restart LSP" }, }, { -- Diagnostics mode = {"n"}, { "d", group="Diagnostics" }, { "dD", "Telescope diagnostics bufnr=0", desc="Show buffer diagnostics" }, { "dd", "lua vim.diagnostic.open_float()", desc="Show diagnostics in floating window" }, { "dn", "lua vim.diagnostic.goto_next()", desc="Go to next diagnostic" }, { "dp", "lua vim.diagnostic.goto_prev()", desc="Go to prev diagnostic" }, }, { -- Database mode = {"n"}, { "D", group="Dadbod SQL database"}, { "Db", "DBUIToggle", desc="Toggle dadbod UI"}, { "Da", "DBUIAddConnection", desc="Add new database connection"}, }, { --Bufferline mode = {"n"}, { "b", group="Buffer" }, { "bp", "BufferLineTogglePin", desc = "Toggle Pin" }, { "bP", "BufferLineGroupClose ungrouped", desc = "Delete Non-Pinned Buffers" }, { "bo", "BufferLineCloseOthers", desc = "Delete Other Buffers" }, { "br", "BufferLineCloseRight", desc = "Delete Buffers to the Right" }, { "bl", "BufferLineCloseLeft", desc = "Delete Buffers to the Left" }, { "", "BufferLineCyclePrev", desc = "Prev Buffer" }, { "", "BufferLineCycleNext", desc = "Next Buffer" }, { "b", "BufferLineCyclePrev", desc = "Prev Buffer" }, { "b", "BufferLineCycleNext", desc = "Next Buffer" }, }, { -- TODO comments mode = {"n"}, { "t", group="TODO" }, { "tt", "TodoTelescope", desc = "Show todos" }, { "tn", function() require("todo-comments").jump_next() end, desc="Next todo comment" }, { "tp", function() require("todo-comments").jump_prev() end, desc="Previous todo comment" }, }, { -- Trouble { "x", group="Trouble" }, { "xx", "Trouble diagnostics toggle", desc = "Open/close trouble list" }, { "xL", "Trouble loclist toggle", desc = "Open trouble location list diagnostics" }, { "xd", "Trouble diagnostics toggle filter.buf=0", desc = "Open trouble document diagnostics", }, { "xq", "Trouble qflist toggle", desc = "Open trouble quickfix list" }, { "xl", "Trouble lsp toggle focus=false win.position=right", desc = "LSP Definitions / references (Trouble)", }, { "xt", "TodoTrouble", desc = "Open todos in trouble" }, }, { -- Flutter mode = {"n"}, { "F", group="Flutter" }, { "Ff", "Telescope flutter commands", desc="Show flutter commands" }, { "Fo", "FlutterOutlineToggle", desc="Show flutter outline" }, { "Fd", "FlutterDevices", desc="Show devices" }, { "Fe", "FlutterEmulators", desc="Show emulators" }, { "Fq", "FlutterQuit", desc="Quit flutter" }, { "Fr", "FlutterReload", desc="Hot reload" }, { "FR", "FlutterRestart", desc="Hot restart" }, { "Fg", "FlutterPubGet", desc="Pub get" }, { "Fc", "FlutterLogClear", desc="Clear logs" }, { "FF", "FlutterRun", desc="Flutter run!" }, }, }) -- Substitute local substitute = require("substitute") vim.keymap.set("n", "s", substitute.operator, { desc = "Substitute with motion" }) vim.keymap.set("n", "ss", substitute.line, { desc = "Substitute line" }) vim.keymap.set("n", "S", substitute.eol, { desc = "Substitute to end of line" }) vim.keymap.set("x", "s", substitute.visual, { desc = "Substitute in visual mode" }) end