-- Clues ======================================================================= Config.leader_group_clues = { { mode = "n", keys = "b", desc = "+Buffer" }, { mode = "n", keys = "d", desc = "+Debug" }, { mode = "n", keys = "e", desc = "+Explore" }, { mode = "n", keys = "f", desc = "+Find" }, { mode = "n", keys = "g", desc = "+Git" }, { mode = "n", keys = "l", desc = "+Language" }, { mode = "n", keys = "r", desc = "+Run" }, { mode = "n", keys = "s", desc = "+Session" }, { mode = "n", keys = "t", desc = "+Terminal" }, { mode = "x", keys = "g", desc = "+Git" }, { mode = "x", keys = "l", desc = "+Language" }, } -- Keymap Helpers ============================================================= local function map(mode, lhs, rhs, desc) vim.keymap.set(mode, lhs, rhs, { desc = desc, silent = true }) end local function leader(suffix, rhs, desc, mode) map(mode or "n", "" .. suffix, rhs, desc) end -- Buffers ===================================================================== leader("bd", "bdelete", "Delete") leader("bD", "bdelete!", "Delete!") leader("bw", "bwipeout", "Wipeout") leader("bW", "bwipeout!", "Wipeout!") leader("bo", function() local visible = vim.iter(vim.api.nvim_list_wins()):map(vim.api.nvim_win_get_buf):totable() vim.iter(vim.api.nvim_list_bufs()) :filter(function(buf) return not vim.list_contains(visible, buf) end) :each(function(buf) pcall(vim.api.nvim_buf_delete, buf, { force = false }) end) end, "Close invisible buffers") -- Debug ======================================================================= leader("db", function() require("dap").toggle_breakpoint() end, "Toggle Breakpoint") leader("dl", function() require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point: ")) end, "Log point") leader("dc", function() require("dap").continue() end, "Run/Continue") leader("dC", function() require("dap").run_to_cursor() end, "Run to Cursor") leader("de", function() require("dap.ui.widgets").hover() end, "Inspect") leader("dr", function() require("dap").repl.open() end, "Open REPL") leader("dt", function() require("dap").terminate() end, "Terminate") -- Explore ===================================================================== leader("ed", function() MiniFiles.open() end, "Directory") leader("ef", function() local file = vim.api.nvim_buf_get_name(0) MiniFiles.open(vim.uv.fs_stat(file) and file or nil) end, "File directory") -- Find ======================================================================== leader("fb", function() MiniPick.builtin.buffers() end, "Buffers") leader("fc", function() MiniExtra.pickers.git_commits() end, "Commits (all)") leader("fC", function() MiniExtra.pickers.git_commits({ path = "%" }) end, "Commits (buf)") leader("fd", function() MiniExtra.pickers.diagnostic({ scope = "all" }) end, "Diagnostic workspace") leader("fD", function() MiniExtra.pickers.diagnostic({ scope = "current" }) end, "Diagnostic buffer") leader("ff", function() MiniPick.builtin.files() end, "Files") leader("fg", function() MiniPick.builtin.grep_live() end, "Grep live") leader("fG", function() MiniPick.builtin.grep({ pattern = vim.fn.expand("") }) end, "Grep word") leader("fh", function() MiniPick.builtin.help() end, "Help tags") leader("fl", function() MiniPick.builtin.buf_lines({ scope = "all" }) end, "Lines (all)") leader("fL", function() MiniPick.builtin.buf_lines({ scope = "current" }) end, "Lines (buf)") leader("fr", function() MiniPick.builtin.resume() end, "Resume") leader("fs", function() MiniExtra.pickers.lsp({ scope = "workspace_symbol_live" }) end, "Symbols workspace") leader("fS", function() MiniExtra.pickers.lsp({ scope = "document_symbol" }) end, "Symbols document") leader("f:", function() MiniExtra.pickers.history({ scope = ":" }) end, "Command history") -- Git ========================================================================= leader("go", function() MiniDiff.toggle_overlay() end, "Toggle overlay") leader("gs", function() MiniGit.show_at_cursor() end, "Show at cursor") leader("gs", function() MiniGit.show_at_cursor() end, "Show selection", "x") -- Language ==================================================================== leader("la", vim.lsp.buf.code_action, "Actions") leader("ld", vim.diagnostic.open_float, "Diagnostic popup") leader("lf", function() require("conform").format({ async = true }) end, "Format") leader("lf", function() require("conform").format({ async = true }) end, "Format selection", "x") leader("li", vim.lsp.buf.implementation, "Implementation") leader("lh", vim.lsp.buf.hover, "Hover") leader("ll", vim.lsp.codelens.run, "Lens") leader("lr", vim.lsp.buf.rename, "Rename") leader("lR", vim.lsp.buf.references, "References") leader("ls", vim.lsp.buf.definition, "Source definition") leader("lt", vim.lsp.buf.type_definition, "Type definition") -- Run ========================================================================= leader("rj", function() require("just").pick_just_task() end, "Run Just Task") leader("rh", function() require("kulala").run() end, "Send HTTP request") -- Session ===================================================================== leader("sd", function() MiniSessions.select("delete") end, "Delete") leader("sn", function() vim.ui.input({ prompt = "Session name: " }, MiniSessions.write) end, "New") leader("sr", function() MiniSessions.select("read") end, "Read") leader("sR", function() MiniSessions.restart() end, "Restart") leader("sw", function() MiniSessions.write() end, "Write current") -- Terminal ==================================================================== leader("tT", "horizontal term", "Terminal (horizontal)") leader("tt", "vertical term", "Terminal (vertical)") leader("tc", "vertical term claude", "Claude") leader("tg", function() require("terminal").open_terminal_app("lazygit") end, "LazyGit") leader("ts", function() require("terminal").open_terminal_app("lazysql") end, "LazySQL") -- Overwrites ================================================================== map("n", "", "nohlsearch", "Clear highlights") map("t", "", "", "Terminal window navigation")