-- Core keymaps -- General key mappings not tied to specific plugins -- Leader key vim.g.mapleader = " " ---------------- -- NORMAL MODE ---------------- -- File operations vim.keymap.set("n", "w", "w", { desc = "Save file" }) vim.keymap.set("n", "q", "q", { desc = "Quit" }) vim.keymap.set("n", "Q", "q!", { desc = "Force quit" }) vim.keymap.set("n", "", "bd", { desc = "Close buffer" }) -- Quick buffer navigation vim.keymap.set("n", "", "h", { desc = "Move to left window" }) vim.keymap.set("n", "", "j", { desc = "Move to bottom window" }) vim.keymap.set("n", "", "k", { desc = "Move to top window" }) vim.keymap.set("n", "", "l", { desc = "Move to right window" }) -- Quick formatting vim.keymap.set("n", "S", "ggVG=", { desc = "Format entire file" }) -- Quick line operations vim.keymap.set("n", "o", "o", { desc = "New line below" }) vim.keymap.set("n", "O", "O", { desc = "New line above" }) vim.keymap.set("n", "J", "mzJ`z", { desc = "Join lines and maintain cursor" }) -- Better vertical navigation vim.keymap.set("n", "", "zz", { desc = "Half page down and center" }) vim.keymap.set("n", "", "zz", { desc = "Half page up and center" }) vim.keymap.set("n", "n", "nzzzv", { desc = "Next search result and center" }) vim.keymap.set("n", "N", "Nzzzv", { desc = "Prev search result and center" }) -- Clipboard operations vim.keymap.set({"n", "v"}, "y", [["+y]], { desc = "Copy to system clipboard" }) vim.keymap.set("n", "Y", [["+Y]], { desc = "Copy line to system clipboard" }) vim.keymap.set({"n", "v"}, "d", [["_d]], { desc = "Delete to void register" }) vim.keymap.set("x", "p", [["_dP]], { desc = "Paste over selection" }) -- Quickfix navigation vim.keymap.set("n", "k", "lnextzz", { desc = "Next quickfix item" }) vim.keymap.set("n", "j", "lprevzz", { desc = "Previous quickfix item" }) -- Undo remap vim.keymap.set("n", "U", "", { desc = "Redo" }) -- Search and replace current word vim.keymap.set("n", "s", [[:%s/\<\>//gI]], { desc = "Replace current word" }) -- Terminal keymaps vim.keymap.set("n", "t", "ToggleTerm", { desc = "Toggle terminal" }) vim.keymap.set({"n", "i"},"", "ToggleTermSendCurrentLinej", { desc = "Send line to terminal" }) vim.keymap.set("n","", "ggVG:'<,'>ToggleTermSendVisualLines", { desc = "Send file to terminal" }) vim.keymap.set("i","", "ggVG:'<,'>ToggleTermSendVisualLinesi", { desc = "Send file to terminal" }) vim.keymap.set("v","", ":ToggleTermSendVisualLines", { desc = "Send selection to terminal" }) -- File browser vim.keymap.set("n", "-", "Oil", { desc = "Open parent directory with Oil" }) -- LSP quick diagnostics vim.keymap.set('n', 'e', vim.diagnostic.open_float, { noremap=true, silent=true, desc = "Show diagnostics" }) -- Python docstring helper vim.keymap.set("n", "dc", ":PythonDocstring", { silent = true, desc = "Insert Python docstring template" }) ---------------- -- INSERT MODE ---------------- vim.keymap.set("i", "jk", "", { desc = "Exit insert mode" }) vim.keymap.set("i", "e", "e", { desc = "Insert e after leader" }) vim.keymap.set("i", "", "bd", { desc = "Close buffer" }) ---------------- -- VISUAL MODE ---------------- -- Move selected lines vim.keymap.set("v", "J", ":m '>+1gv=gv", { desc = "Move selection down" }) vim.keymap.set("v", "K", ":m '<-2gv=gv", { desc = "Move selection up" }) -- Telescope keymaps (grouped for related functionality) vim.keymap.set("n", "ff", "Telescope find_files theme=dropdown", { desc = "Find files" }) vim.keymap.set("n", "fm", "Telescope find_files cwd=D:/Optics/CODEV/Macros theme=dropdown", { desc = "Find macro files" }) vim.keymap.set("n", "fc", "Telescope find_files cwd=C:/CODEV202403/macro theme=dropdown", { desc = "Find CODEV macro files" }) vim.keymap.set("n", "fl", "Telescope find_files cwd=C:/CODEV202403/lens theme=dropdown", { desc = "Find lens files" }) vim.keymap.set("n", "gg", "Telescope live_grep theme=dropdown", { desc = "Live grep" }) vim.keymap.set("n", "gm", "Telescope live_grep cwd=D:/Optics/CODEV/Macros theme=dropdown", { desc = "Grep in macro files" }) vim.keymap.set("n", "gc", "Telescope live_grep cwd=C:/CODEV202403/macro theme=dropdown", { desc = "Grep in CODEV macro files" }) vim.keymap.set("n", "gl", "Telescope live_grep cwd=C:/CODEV202403/lens theme=dropdown", { desc = "Grep in lens files" }) vim.keymap.set("n", "b", "Telescope buffers theme=dropdown", { desc = "List buffers" }) -- Harpoon keymaps vim.keymap.set("n", "a", function() require("harpoon"):list():add() end, { desc = "Add file to harpoon" }) vim.keymap.set("n", "", function() require("harpoon").ui:toggle_quick_menu(require("harpoon"):list()) end, { desc = "Toggle harpoon menu" }) vim.keymap.set("n", "h", function() require("harpoon"):list():select(1) end, { desc = "Harpoon file 1" }) vim.keymap.set("n", "j", function() require("harpoon"):list():select(2) end, { desc = "Harpoon file 2" }) vim.keymap.set("n", "k", function() require("harpoon"):list():select(3) end, { desc = "Harpoon file 3" }) vim.keymap.set("n", "l", function() require("harpoon"):list():select(4) end, { desc = "Harpoon file 4" }) vim.keymap.set("n", "N", function() require("harpoon"):list():prev() end, { desc = "Previous harpoon file" }) vim.keymap.set("n", "P", function() require("harpoon"):list():next() end, { desc = "Next harpoon file" }) -- Other tool keymaps vim.keymap.set("n", "G", vim.cmd.Git, { desc = "Open Git status" }) vim.keymap.set("n", "u", vim.cmd.UndotreeToggle, { desc = "Toggle undo tree" }) vim.keymap.set("n", "[c", function() require("treesitter-context").go_to_context() end, { desc = "Go to context", silent = true })