diff --git a/lua/keymappings.lua b/lua/keymappings.lua index 7ee985e6..ffe2072c 100644 --- a/lua/keymappings.lua +++ b/lua/keymappings.lua @@ -1,83 +1,106 @@ --- better window movement -vim.api.nvim_set_keymap("n", "", "h", { silent = true }) -vim.api.nvim_set_keymap("n", "", "j", { silent = true }) -vim.api.nvim_set_keymap("n", "", "k", { silent = true }) -vim.api.nvim_set_keymap("n", "", "l", { silent = true }) - --- Terminal window navigation -vim.api.nvim_set_keymap("t", "", "h", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("t", "", "j", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("t", "", "k", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("t", "", "l", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("i", "", "h", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("i", "", "j", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("i", "", "k", { silent = true, noremap = true }) -vim.api.nvim_set_keymap("i", "", "l", { silent = true, noremap = true }) - --- TODO: fix this --- resize with arrows -if vim.fn.has "mac" == 1 then - vim.api.nvim_set_keymap("n", "", ":resize -2", { silent = true }) - vim.api.nvim_set_keymap("n", "", ":resize +2", { silent = true }) - vim.api.nvim_set_keymap("n", "", ":vertical resize -2", { silent = true }) - vim.api.nvim_set_keymap("n", "", ":vertical resize +2", { silent = true }) -else - vim.api.nvim_set_keymap("n", "", ":resize -2", { silent = true }) - vim.api.nvim_set_keymap("n", "", ":resize +2", { silent = true }) - vim.api.nvim_set_keymap("n", "", ":vertical resize -2", { silent = true }) - vim.api.nvim_set_keymap("n", "", ":vertical resize +2", { silent = true }) +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 --- better indenting -vim.api.nvim_set_keymap("v", "<", "", ">gv", { noremap = true, silent = true }) +local mappings = { + i = { -- Insert mode + -- I hate escape + { "jk", "" }, + { "kj", "" }, + { "jj", "" }, --- I hate escape -vim.api.nvim_set_keymap("i", "jk", "", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("i", "kj", "", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("i", "jj", "", { noremap = true, silent = true }) + -- Move current line / block with Alt-j/k ala vscode. + { "", ":m .+1==gi" }, + { "", ":m .-2==gi" }, --- Tab switch buffer --- vim.api.nvim_set_keymap("n", "", ":bnext", { noremap = true, silent = true }) --- vim.api.nvim_set_keymap("n", "", ":bprevious", { noremap = true, silent = true }) + -- 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 } }, --- Move selected line / block of text in visual mode -vim.api.nvim_set_keymap("x", "K", ":move '<-2gv-gv", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("x", "J", ":move '>+1gv-gv", { noremap = true, silent = true }) + -- Resize with arrows + { "", ":resize -2", { silent = true } }, + { "", ":resize +2", { silent = true } }, + { "", ":vertical resize -2", { silent = true } }, + { "", ":vertical resize +2", { silent = true } }, --- Move current line / block with Alt-j/k ala vscode. -vim.api.nvim_set_keymap("n", "", ":m .+1==", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("n", "", ":m .-2==", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("i", "", ":m .+1==gi", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("i", "", ":m .-2==gi", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("x", "", ":m '>+1gv-gv", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("x", "", ":m '<-2gv-gv", { noremap = true, silent = true }) + -- Tab switch buffer + -- { "", ":bnext" }, + -- { "", ":bprevious" }, --- QuickFix -vim.api.nvim_set_keymap("n", "]q", ":cnext", { noremap = true, silent = true }) -vim.api.nvim_set_keymap("n", "[q", ":cprev", { noremap = true, silent = true }) + -- 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 }) --- Better nav for omnicomplete vim.cmd 'inoremap ("\\")' vim.cmd 'inoremap ("\\")' -vim.cmd 'vnoremap p "0p' -vim.cmd 'vnoremap P "0P' - --- vim.api.nvim_set_keymap('v', 'p', '"0p', {silent = true}) --- vim.api.nvim_set_keymap('v', 'P', '"0P', {silent = true}) - -- vim.cmd('inoremap (\"\\\")') -- vim.cmd('inoremap (\"\\\")') --- vim.api.nvim_set_keymap('i', '', 'compe#complete()', {noremap = true, silent = true, expr = true}) - -- vim.cmd([[ -- map p (miniyank-autoput) -- map P (miniyank-autoPut) -- map n (miniyank-cycle) -- map N (miniyank-cycleback) -- ]]) - --- Toggle the QuickFix window -vim.api.nvim_set_keymap("", "", ":call QuickFixToggle()", { noremap = true, silent = true })