vim.g.mapleader = " " vim.g.maplocalleader = " " ---@param bind string ---@param cmd function | string ---@param desc string ---@param userargs? table local vnoremap = function(bind, cmd, desc, userargs) local args = userargs or {} args.desc = desc vim.keymap.set("v", bind, cmd, args) end ---@param bind string ---@param cmd function | string ---@param desc string ---@param userargs? table local nnoremap = function(bind, cmd, desc, userargs) local args = userargs or {} args.desc = desc vim.keymap.set("n", bind, cmd, args) end -- Move vnoremap("J", ":m '>+1gv", "Move line down") vnoremap("K", ":m '<-2gv", "Move line up") vnoremap(">", ">gv", "Shift right (keep selection)") vnoremap("<", "", "zz", "Page down (then center)") nnoremap("", "zz", "Page up (then center)") nnoremap("gd", "gdzz", "Go to definition (then center)") nnoremap("gD", "vgd", "Go to definition in a new window", { remap = true }) nnoremap("``", "``zz", "Jump to `` (then center)") nnoremap("J", "mzJ`z", "Join line (and restore cursor)") -- Better clipboard vim.keymap.set({ "n", "x", "v" }, "d", '"_d', { desc = "Delete (void register)" }) vim.keymap.set({ "n", "x", "v" }, "c", '"_dc', { desc = "Change (void regsiter)" }) vim.keymap.set({ "n", "x", "v" }, "p", '"_dP', { desc = "Paste (void register)" }) vim.keymap.set({ "n", "x", "v" }, "y", '"+y', { desc = "Yank (system clipboard)" }) -- Replace selected token nnoremap("pv", function() vim.cmd("Oil") end, "Open oil") nnoremap("leader>+x", ":!chmod +x %", "Make executable") nnoremap("leader>-x", ":!chmod -x %", "Make non-executable") vim.keymap.set("c", "#capl", [[\(.\{-}\)]], { desc = "Capture more" }) vim.keymap.set("c", "#capm", [[\(.*\)]], { desc = "Capture less" }) -- Diagnostics nnoremap("e", vim.diagnostic.open_float, "Open diagnostic as float") nnoremap("pe", function() vim.diagnostic.jump { count = -1, float = true } end, "Previous diagnostic") nnoremap("ne", function() vim.diagnostic.jump { count = 1, float = true } end, "Next diagnostic") -- Resize window using shift + arrow keys -- Credit: github.com/GrizzlT vim.keymap.set("n", "", "resize +2") vim.keymap.set("n", "", "resize -2") vim.keymap.set("n", "", "vertical resize -2") vim.keymap.set("n", "", "vertical resize +2")