-- vim: foldmethod=marker foldlevel=0 -- n, v, i, t, c = mode name.s local function termcodes(str) return vim.api.nvim_replace_termcodes(str, true, true, true) end local M = {} M.general = { --{{{ i = { ["jk"] = { "", "escape" }, -- navigate within insert mode [""] = { "", "move left" }, [""] = { "", "move right" }, [""] = { "", "move down" }, [""] = { "", "move up" }, [""] = { " update ", "update file (save on changes)" }, -- luasnip change choice [""] = { "luasnip-next-choice", "change luasnip choice" }, }, n = { [""] = { " noh ", "no highlight" }, -- switch between windows [""] = { "h", "window left" }, [""] = { "l", "window right" }, [""] = { "j", "window down" }, [""] = { "k", "window up" }, -- Window resizing [""] = { " vert res -2 ", "window width +" }, [""] = { " vert res +2 ", "window width -" }, [""] = { "res +2 ", "window height +" }, [""] = { "res -2 ", "window height -" }, ["="] = { "=", "adjust viewports "}, -- quit dont save ["qq"] = { " quitall! ", "quit/close all windows, don't save" }, -- ["Q"] = { " q!", "quit now" }, -- easier horizontal scrolling ["zl"] = { "zL", "horizontal scroll left" }, ["zh"] = { "zH", "horizontal scroll right" }, -- Use fast jump to exact location and reserve `` for other usage ["''"] = { "``", "jump back to exact location" }, -- Go to the first non-blank character of a line ["0"] = { "^" }, -- Just in case you need to go to the very beginning of a line ["^"] = { "0" }, ["ww"] = { " set wrap! echo 'wrap = '.&wrap " }, -- save [""] = { " update ", "save file" }, -- Copy all [""] = { " %y+ ", "copy whole file" }, -- line numbers ["n"] = { " set nu! set rnu!", "toggle line number" }, -- update nvchad ["uu"] = { " :NvChadUpdate ", "update nvchad" }, -- PackerSnapshot ["pp"] = { function() local snapname = "snapshot_" .. os.date("%Y_%m_%d") local packer = require 'packer' packer.snapshot(snapname) end , "packer snapshot"}, ["ss"] = { " mks! ", "save session"}, ["sl"] = { " source Session.vim ", "load session"}, ["tt"] = { function() require("base46").toggle_theme() end, "toggle theme", }, -- luasnip edit snippets ["se"] = { function() require("luasnip.loaders").edit_snippet_files() end, "luasnip edit snippets" }, -- Allow moving the cursor through wrapped lines with j, k, and -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ -- empty mode is same as using :map -- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour -- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', opts = { expr = true } }, -- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', opts = { expr = true } }, ["j"] = { "gj" }, ["k"] = { "gk" }, -- new buffer [""] = { " enew ", "new buffer" }, -- new tab [""] = { " tabe ", "new tab" }, -- Fast tab [""] = { "gT", "Previous tab" }, [""] = { "gt", "Previous tab" }, -- close buffer + hide terminal buffer ["x"] = { function() require("core.utils").close_buffer() end, "close buffer", }, -- quick close window [""] = {"c", "close window"}, -- yank from cusor to eol to system and primary clipboard ["y"] = { '"*y$"+y$', "yank from cursor to eol to primary and clipboard" }, -- folding levels ["f0"] = { ":set foldlevel=0", "set fold level" }, ["f1"] = { ":set foldlevel=1", "set fold level" }, ["f2"] = { ":set foldlevel=2", "set fold level" }, ["f3"] = { ":set foldlevel=3", "set fold level" }, ["f4"] = { ":set foldlevel=4", "set fold level" }, ["f5"] = { ":set foldlevel=5", "set fold level" }, ["f6"] = { ":set foldlevel=6", "set fold level" }, ["f7"] = { ":set foldlevel=7", "set fold level" }, ["f8"] = { ":set foldlevel=8", "set fold level" }, ["f9"] = { ":set foldlevel=9", "set fold level" }, ["en"] = { " cn ", "next error" }, ["ep"] = { " cp ", "previous error" }, -- Tabularize mappings ["a&"] = { " Tabularize /&" }, ["a="] = { " Tabularize /^[^=]*\zs=" }, ["a:"] = { " Tabularize /:" }, ["a,"] = { " Tabularize /," }, ["a"] = { " Tabularize /" }, ["g."] = { ":cwd", "change dir to current file", opts = { remap = true } }, ["g."] = { ":Gcd", "change dir to git root" }, -- Packer commands ["ps"] = { " PackerSync ", "packer sync" }, -- Notify cmd watcher (see /scripts/utils/fifo_watch.sh) [","] = { function() local fifo_patch = "/tmp/fifo_vimnotify" os.execute("echo do >" .. fifo_patch) end, "notify " }, -- TODO: move to lspconfig section -- ["lsp"] = { " lua require('custom.plugins.configs.navigator').enable()", "lsp enable"}, ["lsp"] = { " LspStart", "lsp enable"}, ["lst"] = { " LspStop", "lsp disable"}, --------------- -- Programming languages specifics --------------- -- luadev ["lsc"] = {"Luadev", "Luadev scratch window"}, ["ll"] = {"(Luadev-RunLine)", "Luadev Run Line"}, ["lr"] = {"(Luadev-Run)", "Luadev Run over movement or text object"}, ["lw"] = {"(Luadev-RunWord)", "Luadev Run word under cursor"}, -- -- ["r"] = { "", "Run action"}, -- config files ["ev"] = {" source ~/.config/nvim/Session.vim" , "edit vim config"}, }, t = { [""] = { termcodes "", "escape terminal mode" } }, v = { -- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', opts = { expr = true } }, -- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', opts = { expr = true } }, ["j"] = { "gj" }, ["k"] = { "gk" }, -- Don't copy the replaced text after pasting in visual mode -- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#Alternative_mapping_for_paste ["p"] = { 'p:let @+=@0:let @"=@0', opts = { silent = true } }, -- yank from cursor to eol to system and primary clipboard ["y"] = { '"*y gv"+y', "yank line to clipboards" }, -- visual shifting ["<"] = { ""] = { ">gv" }, -- Allow using the repeat operator with a visual selection (!) -- http://stackoverflow.com/a/8064607/127816 ["."] = { ":normal .", opts = { silent = true } }, -- Tabularize mappings ["a&"] = { " Tabularize /&" }, ["a="] = { " Tabularize /^[^=]*\zs=" }, ["a:"] = { " Tabularize /:" }, ["a,"] = { " Tabularize /," }, ["a"] = { " Tabularize /" }, }, -- command line mappings c = { ["Tabe"] = { "tabe" }, -- Change Working Directory to that of the current file ["cwd"] = { "lcd %:p:h", "change dir to current file" }, ["cd."] = { "lcd %:p:h", "change dir to current file" }, ["w!!"] = { "w !doas tee %", "write file with root perms" }, ["%%"] = { "=fnameescape(expand('%:h')).'/'", "alias to current working dir"}, ["Tab"] = { "Tabularize"}, } } --}}} M.tabufline = { --{{{ plugin = true, n = { -- cycle through buffers [""] = { function() require("core.utils").tabuflineNext() end, "goto next buffer", }, [""] = { function() require("core.utils").tabuflinePrev() end, "goto prev buffer", }, -- pick buffers via numbers [""] = { " TbufPick ", "Pick buffer" }, }, } --}}} M.comment = { --{{{ plugin = true, -- toggle comment in both modes n = { ["/"] = { function() -- require("Comment.api").toggle.linewise.current() vim.notify("use gcc !") end, "toggle comment", }, }, v = { ["/"] = { function() vim.notify("use gcc !") end, -- "lua require('Comment.api').toggle.linewise(vim.fn.visualmode())", "toggle comment", }, }, } --}}} M.lspconfig = { --{{{ plugin = true, -- See ` :help vim.lsp.*` for documentation on any of the below functions n = { ["gD"] = { function() vim.lsp.buf.declaration() end, "lsp declaration", }, ["gd"] = { function() vim.lsp.buf.definition() end, "lsp definition", }, ["K"] = { function() vim.lsp.buf.hover() end, "lsp hover", }, ["gm"] = { function() vim.lsp.buf.implementation() end, "lsp implementation", }, ["ls"] = { function() vim.lsp.buf.signature_help() end, "lsp signature_help", }, ["D"] = { function() vim.lsp.buf.type_definition() end, "lsp definition type", }, ["ra"] = { function() require("nvchad_ui.renamer").open() end, "lsp rename", }, ["ca"] = { function() vim.lsp.buf.code_action() end, "lsp code_action", }, ["gr"] = { function() vim.lsp.buf.references() end, "lsp references", }, ["f"] = { function() vim.diagnostic.open_float() end, "lsp floating diagnostic", }, ["[d"] = { function() vim.diagnostic.goto_prev() end, "lsp goto prev", }, ["d]"] = { function() vim.diagnostic.goto_next() end, "lsp goto_next", }, ["q"] = { function() vim.diagnostic.setloclist() end, "lsp diagnostic setloclist", }, ["fm"] = { function() vim.lsp.buf.formatting {} end, "lsp formatting", }, ["wa"] = { function() vim.lsp.buf.add_workspace_folder() end, "lsp add workspace folder", }, ["wr"] = { function() vim.lsp.buf.remove_workspace_folder() end, "lsp remove workspace folder", }, ["wl"] = { function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, "lsp list workspace folders", }, }, } --}}} M.nvimtree = { --{{{ plugin = true, n = { -- toggle [""] = { " NvimTreeToggle ", "toggle nvimtree" }, }, } --}}} M.fzf_lua = { --{{{ plugin = true, n = { -- find [""] = { " FzfLua files ", "FzfLua find files" }, ["fl"] = { " FzfLua lines ", "FzfLua grep open buffer lines" }, -- grep ["fw"] = { " FzfLua grep_cword ", "FzfLua grep cword" }, ["f."] = { " FzfLua live_grep_native ", "FzfLua grep live native" }, ["ff"] = { " FzfLua grep_project ", "FzfLua grep live project" }, ["f*"] = { " FzfLua live_grep_glob ", "FzfLua grep with glob (SPACE-- globs)" }, -- continue ["fr"] = { " FzfLua resume ", "FzfLua resume last search" }, [";"] = { " FzfLua buffers ", "FzfLua find buffers" }, ["fb"] = { " FzfLua builtins ", "FzfLua builtins" }, ["fh"] = { " FzfLua help_tags ", "FzfLua find help pages" }, ["fo"] = { " FzfLua oldfiles ", "FzfLua find oldfiles" }, ["tk"] = { " FzfLua keymaps ", "FzfLua show keymaps" }, } } --}}} M.telescope = { --{{{ plugin = true, n = { -- find ["ff"] = { " Telescope find_files ", "find files" }, [""] = { " Telescope find_files ", "find files" }, ["fa"] = { " Telescope find_files follow=true no_ignore=true hidden=true ", "find all" }, ["f*"] = { " Telescope live_grep ", "live grep" }, ["fb"] = { " Telescope buffers ", "find buffers" }, [";"] = { " Telescope buffers ", "find buffers" }, ["fh"] = { " Telescope help_tags ", "help page" }, ["fo"] = { " Telescope oldfiles ", "find oldfiles" }, ["tk"] = { " Telescope keymaps ", "show keys" }, -- git ["tg"] = { " ", "telescope git commands" }, ["tgc"] = { " Telescope git_commits ", "git commits" }, ["tgs"] = { " Telescope git_status ", "git status" }, -- pick a hidden term ["pt"] = { " Telescope terms ", "pick hidden term" }, -- theme switcher ["th"] = { " Telescope themes ", "nvchad themes" }, }, } --}}} M.nvterm = { --{{{ plugin = true, t = { -- toggle in terminal mode [""] = { function() require("nvterm.terminal").toggle "float" end, "toggle floatinvg term", }, [""] = { function() require("nvterm.terminal").toggle "horizontal" end, "toggle horizontal term", }, }, n = { -- toggle in normal mode [""] = { function() require("nvterm.terminal").toggle "float" end, "toggle floating term", }, [""] = { function() require("nvterm.terminal").toggle "horizontal" end, "toggle horizontal term", }, [""] = { function() require("nvterm.terminal").toggle "vertical" end, "toggle vertical term", }, -- new ["h"] = { function() require("nvterm.terminal").new "horizontal" end, "new horizontal term", }, ["v"] = { function() require("nvterm.terminal").new "vertical" end, "new vertical term", }, }, } --}}} M.whichkey = { --{{{ plugin = true, n = { ["wK"] = { function() vim.cmd "WhichKey" end, "which-key all keymaps", }, ["wk"] = { function() local input = vim.fn.input "WhichKey: " vim.cmd("WhichKey " .. input) end, "which-key query lookup", }, }, } --}}} M.blankline = { --{{{ -- plugin = true, -- -- n = { -- ["cc"] = { -- function() -- local ok, start = require("indent_blankline.utils").get_current_context( -- vim.g.indent_blankline_context_patterns, -- vim.g.indent_blankline_use_treesitter_scope -- ) -- -- if ok then -- vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start, 0 }) -- vim.cmd [[normal! _]] -- end -- end, -- -- "Jump to current context", -- }, -- }, } --}}} M.navigator = {--{{{ plugin = true, n = { [""] = { " lua require'navigator.treesitter'.side_panel()h", "toggle TreeSitter symbols panel " }, [""] = { " lua require'navigator.symbols'.side_panel()h", "toggle LSP symbols panel" }, } }--}}} M.vista = { -- Tagbar equivalent using LSP {{{ plugin = true, n = { [""] = { " Vista!! ", "toggle TreeSitter symbols " }, }, } --}}} M.asyncrun = { --{{{ plugin = true, n = { ["``"] = { " call asyncrun#quickfix_toggle(8)", "toggle quickfix window" }, ["m"] = { ":AsyncRun -program=" .. vim.o.makeprg .. "", "make using asyncrun" }, ["r"] = { ":AsyncRun ", "custom asyncrun command" }, ["pd"] = { " AsyncRun lpr -P PDF_PRINT %", "PDF print file" }, ["pp"] = { " AsyncRun lpr %" }, }, } --}}} -- M.neorepl = { -- plugin = true, -- -- i = { -- ["C-p"] = { "(neorepl-hist-prev)"}, -- } -- -- } return M