-- 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 = "+Request" }, { 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 nmap_leader = function(suffix, rhs, desc) vim.keymap.set("n", "" .. suffix, rhs, { desc = desc, silent = true }) end local xmap_leader = function(suffix, rhs, desc) vim.keymap.set("x", "" .. suffix, rhs, { desc = desc, silent = true }) end -- Buffers local new_scratch_buffer = function() vim.api.nvim_win_set_buf(0, vim.api.nvim_create_buf(true, true)) end local close_invisible_buffers = 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 nmap_leader("bd", "bdelete", "Delete") nmap_leader("bD", "bdelete!", "Delete!") nmap_leader("bs", new_scratch_buffer, "Scratch") nmap_leader("bw", "bwipeout", "Wipeout") nmap_leader("bW", "bwipeout!", "Wipeout!") nmap_leader("bo", close_invisible_buffers, "Close invisible buffers") -- Debug nmap_leader("db", "lua require('dap').toggle_breakpoint()", "Toggle Breakpoint") nmap_leader("dl", "lua require('dap').set_breakpoint(nil, nil, vim.fn.input('Log point: '))", "Log point") nmap_leader("dc", "lua require('dap').continue()", "Run/Continue") nmap_leader("dC", "lua require('dap').run_to_cursor()", "Run to Cursor") nmap_leader("de", "lua require('dap.ui.widgets').hover()", "Inspect") nmap_leader("dr", "lua require('dap').repl.open()", "Open REPL") nmap_leader("dt", "lua require('dap').terminate()", "Terminate") -- Explore local explore_at_file = function() local file = vim.api.nvim_buf_get_name(0) MiniFiles.open(vim.uv.fs_stat(file) and file or nil) end nmap_leader("ed", "lua MiniFiles.open()", "Directory") nmap_leader("ef", explore_at_file, "File directory") nmap_leader("ey", "lua vim.fn.setreg('+', vim.api.nvim_buf_get_name(0))", "Yank absolute path") nmap_leader("en", "messages", "Notifications") -- Find nmap_leader("fb", "lua MiniPick.builtin.buffers()", "Buffers") nmap_leader("fc", "lua MiniExtra.pickers.git_commits()", "Commits (all)") nmap_leader("fC", "lua MiniExtra.pickers.git_commits({ path = '%' })", "Commits (buf)") nmap_leader("fd", "lua MiniExtra.pickers.diagnostic({ scope = 'all' })", "Diagnostic workspace") nmap_leader("fD", "lua MiniExtra.pickers.diagnostic({ scope = 'current' })", "Diagnostic buffer") nmap_leader("ff", "lua MiniPick.builtin.files()", "Files") nmap_leader("fg", "lua MiniPick.builtin.grep_live()", "Grep live") nmap_leader("fG", "lua MiniPick.builtin.grep({ pattern = vim.fn.expand('') })", "Grep word") nmap_leader("fh", "lua MiniPick.builtin.help()", "Help tags") nmap_leader("fl", "lua MiniPick.builtin.buf_lines({ scope = 'all' })", "Lines (all)") nmap_leader("fL", "lua MiniPick.builtin.buf_lines({ scope = 'current' })", "Lines (buf)") nmap_leader("fr", "lua MiniPick.builtin.resume()", "Resume") nmap_leader("fs", "lua MiniExtra.pickers.lsp({ scope = 'workspace_symbol_live' })", "Symbols workspace") nmap_leader("fS", "lua MiniExtra.pickers.lsp({ scope = 'document_symbol' })", "Symbols document") nmap_leader("f:", "lua MiniExtra.pickers.history({ scope = ':' })", "Command history") -- Git local git_log_cmd = [[Git log --pretty=format:\%h\ \%as\ │\ \%s --topo-order]] local git_log_buf_cmd = git_log_cmd .. " --follow -- %" nmap_leader("ga", "Git diff --cached", "Added diff") nmap_leader("gA", "Git diff --cached -- %", "Added diff buffer") nmap_leader("gd", "Git diff", "Diff") nmap_leader("gD", "Git diff -- %", "Diff buffer") nmap_leader("gl", "" .. git_log_cmd .. "", "Log") nmap_leader("gL", "" .. git_log_buf_cmd .. "", "Log buffer") nmap_leader("go", "lua MiniDiff.toggle_overlay()", "Toggle overlay") nmap_leader("gs", "lua MiniGit.show_at_cursor()", "Show at cursor") xmap_leader("gs", "lua MiniGit.show_at_cursor()", "Show at selection") -- Language nmap_leader("la", "lua vim.lsp.buf.code_action()", "Actions") nmap_leader("ld", "lua vim.diagnostic.open_float()", "Diagnostic popup") nmap_leader("lf", "lua require('conform').format({ async = true })", "Format") xmap_leader("lf", "lua require('conform').format({ async = true })", "Format selection") nmap_leader("li", "lua vim.lsp.buf.implementation()", "Implementation") nmap_leader("lh", "lua vim.lsp.buf.hover()", "Hover") nmap_leader("ll", "lua vim.lsp.codelens.run()", "Lens") nmap_leader("lr", "lua vim.lsp.buf.rename()", "Rename") nmap_leader("lR", "lua vim.lsp.buf.references()", "References") nmap_leader("ls", "lua vim.lsp.buf.definition()", "Source definition") nmap_leader("lt", "lua vim.lsp.buf.type_definition()", "Type definition") -- Request nmap_leader("rs", "lua require('kulala').run()", "Send HTTP request") -- Session local session_new = "vim.ui.input({ prompt = 'Session name: ' }, MiniSessions.write)" nmap_leader("sd", "lua MiniSessions.select('delete')", "Delete") nmap_leader("sn", "lua " .. session_new .. "", "New") nmap_leader("sr", "lua MiniSessions.select('read')", "Read") nmap_leader("sR", "lua MiniSessions.restart()", "Restart") nmap_leader("sw", "lua MiniSessions.write()", "Write current") -- Terminal nmap_leader("tT", "horizontal term", "Terminal (horizontal)") nmap_leader("tt", "vertical term", "Terminal (vertical)") nmap_leader("tc", "vertical term claude", "Claude") nmap_leader("tf", "lua require('terminal').open_terminal_app('bash')", "Terminal (popup)") nmap_leader("tg", "lua require('terminal').open_terminal_app('lazygit')", "LazyGit") nmap_leader("ts", "lua require('terminal').open_terminal_app('lazysql')", "LazySQL") -- Overwrites vim.keymap.set("n", "", "nohlsearch", { desc = "Clear highlights", silent = true }) vim.keymap.set("t", "", "", { desc = "Terminal window navigation", silent = true })