local wk = require("which-key") local function wkAdd(keys, func, desc, mode) mode = mode or "n" wk.add({ keys, func, desc = desc, mode = mode }) end local function wkGroup(keys, group, modes) modes = modes or { "n" } wk.add({ keys, group = group, mode = modes }) end -- NOTE misc keymaps wkAdd("jj", "", "Exit insert mode", "i") wkAdd("", "nohl", "Clear search") wkAdd("n", "o", "Add new line") wkAdd("N", "O", "Add new line above") wkAdd("+", "", "Increment number by 1") wkAdd("-", "", "Decrement number by 1") wkAdd("W", "ee", "Oil --float", "Open file manager") vim.keymap.set("t", "", "", { desc = "Exit terminal mode" }) -- NOTE Surround wkGroup("w", "Wrap (quotes, brackets)") -- NOTE search wkGroup("s", "Search") wkAdd("sf", "FzfLua files", "Search files") wkAdd("sz", "FzfLua builtin", "Search builtins") wkAdd("sb", "FzfLua buffers", "Search buffers") wkAdd("sw", "FzfLua live_grep", "Search word") wkAdd("s/", "FzfLua grep_curbuf", "Search in current buffer") wkAdd("ss", "FzfLua lsp_document_symbols", "Search document symbols") wkAdd("sS", "FzfLua lsp_live_workspace_symbols", "Search workspace symbols") -- NOTE files and buffers wkGroup("b", "Buffers") wkAdd("bw", "w!", "Save current buffer") wkAdd("bW", "wa!", "Save all buffers") wkAdd("bq", "wq!", "Save and close current buffer") wkAdd("bQ", "wqa!", "Save and close all buffers") wkAdd("bx", "q!", "Exit current buffer without saving") wkAdd("bX", "qa!", "Exit session without saving") wkAdd("bn", "]b", "Go to next buffer") wkAdd("bp", "[b", "Go to prev buffer") -- NOTE Diagnostics wkGroup("d", "Diagnostics") wkAdd("dd", function() vim.diagnostic.open_float() end, "Show line diagnostics") wkAdd("dD", "FzfLua diagnostics_document", "Show document diagnostics") wkAdd("dW", "FzfLua lsp_workspace_diagnostics", "Show workspace diagnostics") wkAdd("dn", function() vim.diagnostic.goto_next() end, "Go to next diagnostic") wkAdd("dp", function() vim.diagnostic.goto_prev() end, "Go to next diagnostic") -- NOTE Terminal wkGroup("t", "Terminal") wkAdd("tt", "ToggleTerm 1 name='dev' direction='float'", "Toggle terminal") wkAdd("ta", "ToggleTermToggleAll", "Toggle all terminals") wkAdd("th", "ToggleTerm 1 name='dev' direction='horizontal'", "Open horizontal terminal") wkAdd("tv", "ToggleTerm 1 name='dev' direction='vertical'", "Open vertical terminal") wkAdd("tp", "ToggleTerm 80 name='Posting' direction='float'", "Open Posting CLI") wkAdd("tP", "TermExec 80 name='Posting' cmd='posting' direction='float'", "Init Posting CLI") -- NOTE Substitute local substitute = require("substitute") wkAdd("s", substitute.operator, "Substitute with motion") wkAdd("ss", substitute.line, "Substitute line") wkAdd("S", substitute.eol, "Substitute to end of line") wkAdd("s", substitute.visual, "Substitute in visual mode", "x") wk.add({ { -- 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!" }, }, }) -- -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier -- -- for people to discover. Otherwise, you normally need to press , which -- -- is not what someone will guess without a bit more experience. -- key.set('t', '', '', { desc = 'Exit terminal mode' }) -- -- -- TIP: Disable arrow keys in normal mode -- -- vim.keymap.set('n', '', 'echo "Use h to move!!"') -- -- vim.keymap.set('n', '', 'echo "Use l to move!!"') -- -- vim.keymap.set('n', '', 'echo "Use k to move!!"') -- -- vim.keymap.set('n', '', 'echo "Use j to move!!"') -- -- -- Keybinds to make split navigation easier. -- -- Use CTRL+ to switch between windows -- -- See `:help wincmd` for a list of all window commands -- vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) -- vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) -- vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) -- vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- -- -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes -- -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) -- -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) -- -- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) -- -- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) -- -- end