-- Load Keybindings from VIM local sep = package.config:sub(1, 1) local vim_mappings = vim.loop.os_homedir() .. sep .. ".vim" .. sep .. "key_maps.vim" if vim.loop.fs_stat(vim_mappings) then vim.cmd("source " .. vim_mappings) end vim.keymap.set({ "n" }, "", "edit " .. vim.fn.expand(vim.fn.stdpath("config")) .. sep .. "init.lua", { desc = "open neovim config" }) vim.keymap.set({ "n", "v" }, "y", '"+y', { desc = "Copy to system clipboard" }) vim.keymap.set({ "n", "v" }, "p", '"+p', { desc = "Paste from system clipboard" }) -- Remap for dealing with word wrap vim.keymap.set({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) vim.keymap.set({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) -- Move to window using the hjkl keys vim.keymap.set("n", "", "h", { desc = "Go to left window", remap = true }) vim.keymap.set("n", "", "j", { desc = "Go to lower window", remap = true }) vim.keymap.set("n", "", "k", { desc = "Go to upper window", remap = true }) vim.keymap.set("n", "", "l", { desc = "Go to right window", remap = true }) -- Resize window using arrow keys vim.keymap.set("n", "", "resize +2", { desc = "Increase window height" }) vim.keymap.set("n", "", "resize -2", { desc = "Decrease window height" }) vim.keymap.set("n", "", "vertical resize -2", { desc = "Decrease window width" }) vim.keymap.set("n", "", "vertical resize +2", { desc = "Increase window width" }) -- Auto add undo breakpoints at different points, while typing vim.keymap.set("i", "", "u", { desc = "Add undo breakpoint and delete last word" }) vim.keymap.set("i", ",", ",u", { desc = "Auto add undo breakpoints on ','" }) vim.keymap.set("i", ".", ".u", { desc = "Auto add undo breakpoints on '.'" }) vim.keymap.set("i", ";", ";u", { desc = "Auto add undo breakpoints on ';'" }) vim.keymap.set("i", "\r", "\ru", { desc = "Auto add undo breakpoints on new lines" }) -- Save file vim.keymap.set({ "i", "x", "n", "s" }, "", "w", { desc = "Save file" }) vim.keymap.set({ "i", "x", "n", "s" }, "", "wqa", { desc = "Save all files and Quit Neovim" }) -- Close Current Buffer vim.keymap.set({ "n", "v" }, "bx", function() if vim.bo.modified then vim.cmd.write() end vim.cmd("bdelete") end, { desc = "Save and close current buffer" }) vim.keymap.set({ "n", "v" }, "xb", function() if vim.bo.modified then vim.cmd.write() end vim.cmd("bdelete") end, { desc = "Save and close current buffer" }) vim.keymap.set("n", "xt", "tabclose", { desc = "Close current tab" }) -- Clear searches vim.keymap.set({ "i", "n" }, "", "noh", { desc = "Escape and clear hlsearch" }) -- https://github.com/mhinz/vim-galore#saner-behavior-of-n-and-n vim.keymap.set("n", "n", "'Nn'[v:searchforward].'zv'", { expr = true, desc = "Next search result" }) vim.keymap.set({ "x", "o" }, "n", "'Nn'[v:searchforward]", { expr = true, desc = "Next search result" }) vim.keymap.set("n", "N", "'nN'[v:searchforward].'zv'", { expr = true, desc = "Prev search result" }) vim.keymap.set({ "x", "o" }, "N", "'nN'[v:searchforward]", { expr = true, desc = "Prev search result" }) local diagnostic_goto = function(next, severity) local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev severity = severity and vim.diagnostic.severity[severity] or nil return function() go({ severity = severity }) vim.cmd("normal! zz") end end vim.keymap.set("n", "]d", diagnostic_goto(true), { desc = "Next Diagnostic" }) vim.keymap.set("n", "[d", diagnostic_goto(false), { desc = "Prev Diagnostic" }) vim.keymap.set("n", "]e", diagnostic_goto(true, "ERROR"), { desc = "Next Error" }) vim.keymap.set("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" }) vim.keymap.set("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" }) vim.keymap.set("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" }) vim.keymap.set("n", "]q", "cnextzz", { desc = "Quickfix: Next" }) vim.keymap.set("n", "[q", "cprevzz", { desc = "Quickfix: Previous" }) vim.keymap.set("n", "cq", function() vim.diagnostic.setqflist() end, { desc = "Project Diagnostics -> Quickfix" }) -- Center cursor vim.keymap.set("n", "n", "nzzzv") vim.keymap.set("n", "N", "Nzzzv")