local function register_mappings(mappings, default_options) for mode, mode_mappings in pairs(mappings) do for _, mapping in pairs(mode_mappings) do local options = #mapping == 3 and table.remove(mapping) or default_options local prefix, cmd = unpack(mapping) pcall(vim.api.nvim_set_keymap, mode, prefix, cmd, options) end end end local mappings = { i = { -- Insert mode -- I hate escape { "jk", "" }, { "kj", "" }, { "jj", "" }, -- Move current line / block with Alt-j/k ala vscode. { "", ":m .+1==gi" }, { "", ":m .-2==gi" }, -- Terminal window navigation { "", "h" }, { "", "j" }, { "", "k" }, { "", "l" }, }, n = { -- Normal mode -- Better window movement { "", "h", { silent = true } }, { "", "j", { silent = true } }, { "", "k", { silent = true } }, { "", "l", { silent = true } }, -- Resize with arrows { "", ":resize -2", { silent = true } }, { "", ":resize +2", { silent = true } }, { "", ":vertical resize -2", { silent = true } }, { "", ":vertical resize +2", { silent = true } }, -- Tab switch buffer -- { "", ":bnext" }, -- { "", ":bprevious" }, -- Move current line / block with Alt-j/k a la vscode. { "", ":m .+1==" }, { "", ":m .-2==" }, -- QuickFix { "]q", ":cnext" }, { "[q", ":cprev" }, -- {'', 'compe#complete()', {noremap = true, silent = true, expr = true}}, }, t = { -- Terminal mode -- Terminal window navigation { "", "h" }, { "", "j" }, { "", "k" }, { "", "l" }, }, v = { -- Visual/Select mode -- Better indenting { "<", "", ">gv" }, { "p", '"0p', { silent = true } }, { "P", '"0P', { silent = true } }, }, x = { -- Visual mode -- Move selected line / block of text in visual mode { "K", ":move '<-2gv-gv" }, { "J", ":move '>+1gv-gv" }, -- Move current line / block with Alt-j/k ala vscode. { "", ":m '>+1gv-gv" }, { "", ":m '<-2gv-gv" }, }, [""] = { -- Toggle the QuickFix window { "", ":call QuickFixToggle()" }, }, } -- TODO: fix this if vim.fn.has "mac" == 1 then mappings["n"][5][1] = "" mappings["n"][6][1] = "" mappings["n"][7][1] = "" mappings["n"][8][1] = "" end register_mappings(mappings, { silent = true, noremap = true }) vim.cmd 'inoremap ("\\")' vim.cmd 'inoremap ("\\")' -- vim.cmd('inoremap (\"\\\")') -- vim.cmd('inoremap (\"\\\")') -- vim.cmd([[ -- map p (miniyank-autoput) -- map P (miniyank-autoPut) -- map n (miniyank-cycle) -- map N (miniyank-cycleback) -- ]])