diff --git a/.config/nvim/lua/config/maps.lua b/.config/nvim/lua/config/maps.lua --- a/.config/nvim/lua/config/maps.lua +++ b/.config/nvim/lua/config/maps.lua @@ -1,62 +1,83 @@ -local map = vim.keymap -local opts = {noremap = true, silent = true} +local function map(mode, lhs, rhs, opts) + opts = opts or {} + opts.silent = opts.silent ~= false + vim.keymap.set(mode, lhs, rhs, opts) +end -map.set("n", "", ":20Lexplore", opts) -map.set("n", "", "n", opts) -map.set("n", "", "N", opts) -map.set("", "", ":let v:hlsearch = !v:hlsearch", opts) -map.set("n", "", ":UndotreeToggle", opts) -map.set("n", "", ":TagbarToggle", opts) +map("n", "", ":20Lexplore") +map("n", "", "n") +map("n", "", "N") +map("", "", ":let v:hlsearch = !v:hlsearch") +map("n", "", ":UndotreeToggle") +map("n", "", ":TagbarToggle") -- Allow :noh even in insert mode -map.set("i", "", "") +map("i", "", "") -- cover for search habit -map.set("c", "", "", opts) +map("c", "", "") -- change to file's directory -map.set("n", "cd", ":cd %:p:h:pwd", opts) +map("n", "cd", ":cd %:p:h:pwd") -- window switching -map.set("n", "", "h", opts) -map.set("n", "", "j", opts) -map.set("n", "", "k", opts) -map.set("n", "", "l", opts) -map.set("n", "", "p", opts) +map("n", "", "h") +map("n", "", "j") +map("n", "", "k") +map("n", "", "l") +map("n", "", "p") + +-- Resize window using arrow keys +map("n", "", "resize +2") +map("n", "", "resize -2") +map("n", "", "vertical resize -2") +map("n", "", "vertical resize +2") -- buffer switching -map.set("n", "gb", "", opts) -map.set("n", "gB", ":ls:b ", {noremap = true}) +map("n", "gb", "") +map("n", "gB", ":ls:b ", {silent = false}) -- Select last paste, in the same mode it was pasted in -map.set("n", "gV", "'`[' . strpart(getregtype(), 0, 1) . '`]'", {noremap=true, expr=true}) +map("n", "gV", "'`[' . strpart(getregtype(), 0, 1) . '`]'", {expr=true}) + +-- Add undo break-points +map("i", ",", ",u") +map("i", ".", ".u") +map("i", ";", ";u") + +-- better indenting +map("v", "<", "", ">gv") + +map("n", "j", "v:count == 0 ? 'gj' : 'j'", {expr = true}) +map("n", "k", "v:count == 0 ? 'gk' : 'k'", {expr = true}) -- Use ltag over tselect -map.set("n", "g", ":exe 'ltag ' . expand('') | lopen", opts) +map("n", "g", ":exe 'ltag ' . expand('') | lopen") -- clear all interestingwords with \\k since \K is ri.vim -map.set("n", "k", ":call UncolorAllWords()", opts) +map("n", "k", ":call UncolorAllWords()") -- use Grep for a recursive * -map.set("n", "g*", ":Grep", opts) +map("n", "g*", ":Grep") -- K: doc, gKK: doc current filename -map.set("n", "gKK", ":call ViewDoc('doc', expand('%:p'))", opts) +map("n", "gKK", ":call ViewDoc('doc', expand('%:p'))") -- Tabular shortcuts -map.set("n", "ta", ":Tabularize first_arrow", opts) -map.set("n", "te", ":Tabularize first_eq", opts) -map.set("n", "tc", ":Tabularize first_colon", opts) -map.set("n", "tm", ":Tabularize methods", opts) +map("n", "ta", ":Tabularize first_arrow") +map("n", "te", ":Tabularize first_eq") +map("n", "tc", ":Tabularize first_colon") +map("n", "tm", ":Tabularize methods") -map.set("n", "a", ":call vimrc#AutoFmtToggle()", opts) +map("n", "a", ":call vimrc#AutoFmtToggle()") -- LSP features -map.set('n', 'd', vim.diagnostic.open_float, opts) -map.set('n', '[d', vim.diagnostic.goto_prev, opts) -map.set('n', ']d', vim.diagnostic.goto_next, opts) -map.set('n', 'ld', vim.diagnostic.setloclist, opts) +map('n', 'd', vim.diagnostic.open_float) +map('n', '[d', vim.diagnostic.goto_prev) +map('n', ']d', vim.diagnostic.goto_next) +map('n', 'ld', vim.diagnostic.setloclist) vim.api.nvim_create_augroup("lsp_attach", {}) @@ -64,23 +85,23 @@ vim.api.nvim_create_autocmd("LspAttach", group = "lsp_attach", callback = function(args) local bufnr = args.buf - local bufopts = { noremap=true, silent=true, buffer=bufnr } + local bufopts = { buffer=bufnr } - map.set('n', 'gD', vim.lsp.buf.declaration, bufopts) - map.set('n', 'gd', vim.lsp.buf.definition, bufopts) - map.set('n', 'K', vim.lsp.buf.hover, bufopts) - map.set('n', 'gi', vim.lsp.buf.implementation, bufopts) - map.set('n', '', vim.lsp.buf.signature_help, bufopts) - map.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) - map.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) - map.set('n', 'wl', function() + map('n', 'gD', vim.lsp.buf.declaration, bufopts) + map('n', 'gd', vim.lsp.buf.definition, bufopts) + map('n', 'K', vim.lsp.buf.hover, bufopts) + map('n', 'gi', vim.lsp.buf.implementation, bufopts) + map('n', '', vim.lsp.buf.signature_help, bufopts) + map('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + map('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + map('n', 'wl', function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, bufopts) - map.set('n', 'D', vim.lsp.buf.type_definition, bufopts) - map.set('n', 'rn', vim.lsp.buf.rename, bufopts) - map.set('n', 'ca', vim.lsp.buf.code_action, bufopts) - map.set('n', 'gr', vim.lsp.buf.references, bufopts) - map.set('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) + map('n', 'D', vim.lsp.buf.type_definition, bufopts) + map('n', 'rn', vim.lsp.buf.rename, bufopts) + map('n', 'ca', vim.lsp.buf.code_action, bufopts) + map('n', 'gr', vim.lsp.buf.references, bufopts) + map('n', 'f', function() vim.lsp.buf.format { async = true } end, bufopts) end, })