Files
neovim-config/plugin/20_keymaps.lua
T
2026-09-05 16:53:39 +02:00

131 lines
6.8 KiB
Lua

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