local util = require("util") -- Remap space as leader key vim.keymap.set("", "", "", { silent = true }) vim.g.mapleader = " " vim.g.maplocalleader = " " -- Modes test -- normal_mode = "n", -- insert_mode = "i", -- visual_mode = "v", -- visual_block_mode = "x", -- term_mode = "t", -- command_mode = "c", local nvx = { "n", "v", "x" } util.keymaps({ -- =========== -- Basic -- =========== { "", 'echo "use h/j/k/l to move!"', mode = nvx }, { "", 'echo "use h/j/k/l to move!"', mode = nvx }, { "", 'echo "use h/j/k/l to move!"', mode = nvx }, { "", 'echo "use h/j/k/l to move!"', mode = nvx }, { ";", ":", desc = "No shift to enter command mode with semicolon. Alias ; to :", mode = nvx }, { "Q", "", mode = nvx }, -- don't do normal Q quit { "a", "ggVG", desc = "Select all", mode = nvx }, { "Q", "qa", desc = "Quit all", mode = nvx }, { "QQ", -- TODO REVISIT is this session stuff still relevant? "NvimTreeCloseSessionDeleteqa", desc = "Quit all, no session saved", mode = nvx, }, { "y", '"+y', desc = "Copy to system clipboard", mode = nvx }, { "p", '"+p', desc = "Paste from system clipboard", mode = nvx }, { "", "nohlsearch", desc = "Clear search on escape" }, { "", "nohlsearch", desc = "Clear search on return" }, { "|", "vsplit", desc = "Vertical Split" }, { "\\", "split", desc = "Horizontal Split" }, -- Buffers { "b", "b#", desc = "Switch to last buffer", mode = nvx }, { "q", function() -- Custom close/quit -- * if non empty buffer, we will simply open a new empty buffer unless -- it is in the close always list -- * if empty buffer, then we will quit this buffer local close_always = { "quickfix", "help", "nofile" } if util.table_contains(close_always, vim.bo.buftype) or (vim.api.nvim_buf_line_count(0) == 1 and vim.api.nvim_buf_get_lines(0, 0, 1, -1)[1] == "") then vim.cmd("silent confirm q") else vim.cmd("enew") end end, desc = "Quit/Close current", mode = nvx, }, { "S", "set equalalwaysset noequalalways", desc = "Equalize/resize screens evenly", mode = nvx, }, { "", "h", desc = "Move window left current", mode = nvx }, { "", "j", desc = "Move window below current", mode = nvx }, { "", "k", desc = "Move window above current", mode = nvx }, { "", "l", desc = "Move window right current", mode = nvx }, -- Tabs -- TODO revisit, do I even need these tab things? { "tn", "tabnew", desc = "Create new tab", mode = nvx }, { "tq", "tabclose", desc = "Close current tab", mode = nvx }, { "H", "tabprevious", desc = "Move to previous tab" }, { "L", "tabnext", desc = "Move to next tab" }, -- LSP/IDE/etc { "l", vim.lsp.buf.format, desc = "Reformat file", mode = nvx, }, { "ld", vim.diagnostic.open_float, desc = "Show diagnostic message", mode = nvx, }, { "ll", vim.diagnostic.setloclist, desc = "Show diagnostics in quickfix list", mode = nvx, }, -- ============= -- ============= -- ============= -- ============= -- ============= -- ============= -- ============= -- normal mode -- ============= -- { "", "", desc = "" }, -- { "n", "nzzzv", desc = "Next search result centered" }, -- { "N", "Nzzzv", desc = "Previous search result centered" }, -- { "", "zz", desc = "Vertical half page down and center cursor" }, -- { "", "zz", desc = "Vertical half page up and center cursor" }, { "J", "mzJ`z", desc = "Move line below onto this line" }, { "", "", desc = "Go back " }, { "]d", vim.diagnostic.goto_next, desc = "Go to next diagnostic message", }, { "[d", vim.diagnostic.goto_prev, desc = "Go to previous diagnostic message", }, -- ============= -- VISUAL -- ============= { "J", ":m '>+1gv=gv", desc = "Visually move block down", mode = "v", }, { "K", ":m '<-2gv=gv", desc = "Visually move block up", mode = "v", }, { ",uu", 'd:let @u = trim(tolower(system("uuidgen")))iu', desc = "Generate and replace UUID", mode = "v", }, { "p", '"_dP', desc = "Paste without yanking replaced content", mode = "v" }, { "", '"hy:%s/h//g', desc = "Replace current selection", mode = "v" }, { ">", "> gv", desc = "Indent selection", mode = "v" }, { "<", "< gv", desc = "Outdent selection", mode = "v" }, -- ============= -- insert / command -- ============= { "", "", desc = "Up", mode = { "i", "c" } }, { "", "", desc = "Down", mode = { "i", "c" } }, { "", "", desc = "Left", mode = { "i", "c" } }, { "", "", desc = "Right", mode = { "i", "c" } }, { "", "", desc = "End", mode = { "i", "c" } }, { "", "", desc = "Home", mode = { "i", "c" } }, -- ============= -- command -- ============= -- { mode = "c" } -- ============= -- terminal -- ============= { "", "", desc = "Escape the terminal", mode = "t" }, })