vim.keymap.set("n", "", "nohlsearch") -- Navigation 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" }) vim.keymap.set("n", "w", ":lua require('harpoon'):list():add()", { desc = "Harpoon: Add file to list" }) vim.keymap.set("n", "e", ":lua require('harpoon').ui:toggle_quick_menu(require('harpoon'):list())", { desc = "Harpoon: Add file to list", }) vim.keymap.set("n", "", ":Ex", { desc = "Open file manager" }) -- Fuzzy find vim.keymap.set("n", "ff", ":lua require('telescope.builtin').find_files()", { desc = "Telescope: [F]ind [F]iles" }) vim.keymap.set("n", "fw", ":lua require('telescope.builtin').live_grep()", { desc = "Telescope: [F]ind [W]ord" }) vim.keymap.set("n", "/", ":lua require('telescope.builtin').current_buffer_fuzzy_find()", { desc = "Telescope: Find in current buffer", }) -- Spelling vim.keymap.set("n", "s=", "z=", { desc = "Suggest spelling currection" }) vim.keymap.set("n", "st", function() vim.o.spell = not vim.o.spell end, { desc = "Toggle spelling correction" }) -- Language Server Protocol & Actions vim.keymap.set("n", "q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" }) vim.keymap.set("n", "t", vim.diagnostic.open_float, { desc = "Open diagnostic" }) vim.api.nvim_create_autocmd("LspAttach", { callback = function(e) ---@param lhs string ---@param rhs string|function ---@param desc string ---@param mode string|string[]? local function map(lhs, rhs, desc, mode) vim.keymap.set(mode or "n", lhs, rhs, { buffer = e.buf, desc = "LSP: " .. desc }) end map("gn", vim.lsp.buf.rename, "Re[n]ame") map("ga", vim.lsp.buf.code_action, "[G]oto Code [A]ction", { "n", "x" }) map("gr", ":lua require('telescope.builtin').lsp_references()", "[G]oto [R]eferences") map("gi", ":lua require('telescope.builtin').lsp_implementations()", "[G]oto [I]mplementation") map("gd", ":lua require('telescope.builtin').lsp_definitions()", "[G]oto [D]efinition") map("gt", ":lua require('telescope.builtin').lsp_type_definitions()", "[G]oto [T]ype Definition") map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration") map("gO", ":lua require('telescope.builtin').lsp_document_symbols()", "[O]pen Document Symbols") map("gW", ":lua require('telescope.builtin').lsp_dynamic_workspace_symbols()", "Open [W]orkspace Symbols") end, group = vim.api.nvim_create_augroup("dot-lsp-attach-keymaps", { clear = true }), }) -- Debugger vim.keymap.set("n", "b", ":lua require('dap').toggle_breakpoint()", { desc = "Debugger: Toggle [B]reakpointn", }) vim.keymap.set("n", "x", ":lua require('dap').continue()", { desc = "Debugger: Continue debugger" }) vim.keymap.set("n", "X", ":lua require('dap').terminate()", { desc = "Debugger: Terminate debugger" }) vim.keymap.set("n", "C", ":lua require('dap').clear_breakpoints()", { desc = "Debugger: Clear all breakpoints", }) vim.keymap.set("n", "xu", ":lua require('dapui').toggle()", { desc = "Debugger: Toggle debugger [U]I" }) vim.keymap.set("n", "K", ":lua require('dapui').eval(nil, { enter=true })", { desc = "Debugger: Toggle debugger [U]I", }) -- Tweaks vim.keymap.set("n", "J", "mzJ`z") -- Move when highlighted vim.keymap.set("n", "", "zz") -- Make cursor stay in place when jumping vim.keymap.set("n", "", "zz") vim.keymap.set("n", "", "") vim.keymap.set("n", "Q", "") vim.keymap.set({ "n", "v" }, "", "", { silent = true }) vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })