From abdf383aa93b70416db33025d93ed64ad1adea3c Mon Sep 17 00:00:00 2001 From: Luc Sinet Date: Mon, 12 Jul 2021 21:27:23 +0200 Subject: Define keymappings using a mapping table (#753) :rocket: --- lua/keymappings.lua | 147 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 62 deletions(-) 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 }) +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 --- 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 }) +local mappings = { + i = { -- Insert mode + -- I hate escape + { "jk", "" }, + { "kj", "" }, + { "jj", "" }, --- 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 }) -end + -- Move current line / block with Alt-j/k ala vscode. + { "", ":m .+1==gi" }, + { "", ":m .-2==gi" }, --- better indenting -vim.api.nvim_set_keymap("v", "<", "", ">gv", { 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 } }, --- 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 }) + -- Resize with arrows + { "", ":resize -2", { silent = true } }, + { "", ":resize +2", { silent = true } }, + { "", ":vertical resize -2", { silent = true } }, + { "", ":vertical resize +2", { silent = true } }, --- 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 }) + -- Tab switch buffer + -- { "", ":bnext" }, + -- { "", ":bprevious" }, --- 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 }) + -- Move current line / block with Alt-j/k a la vscode. + { "", ":m .+1==" }, + { "", ":m .-2==" }, --- 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 }) + -- QuickFix + { "]q", ":cnext" }, + { "[q", ":cprev" }, --- 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 }) + -- {'', '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" }, --- Better nav for omnicomplete -vim.cmd 'inoremap ("\\")' -vim.cmd 'inoremap ("\\")' + { "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" }, -vim.cmd 'vnoremap p "0p' -vim.cmd 'vnoremap P "0P' + -- Move current line / block with Alt-j/k ala vscode. + { "", ":m '>+1gv-gv" }, + { "", ":m '<-2gv-gv" }, + }, + [""] = { + -- Toggle the QuickFix window + { "", ":call QuickFixToggle()" }, + }, +} --- vim.api.nvim_set_keymap('v', 'p', '"0p', {silent = true}) --- vim.api.nvim_set_keymap('v', 'P', '"0P', {silent = true}) +-- 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.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 }) -- cgit v1.2.3