-- vim: foldmethod=marker foldlevel=1 -- 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" }, -- [""] = { "lua require('luasnip.extras.select_choice')()", "change luasnip choice" }, }, --}}} n = { --{{{ [""] = { function() if vim.o.filetype == "qf" then vim.cmd("q") else vim.cmd("noh") end end, "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"] = { " %y+ ", "copy whole file" }, -- line numbers ["n"] = { " set nu! set rnu!", "toggle line number" }, -- option toggle cursor line ["l"] = { " set cul!", "toggle line number" }, ["c"] = { "ccloselclose", "close quickfix" }, ["d"] = { "DelayTrainToggle", "disable delay train" }, ["dge"] = { ":lua require'spike.diagnostics'.set_diagnostics_level(1)", "diagnostic severity level error"}, ["dgw"] = { ":lua require'spike.diagnostics'.set_diagnostics_level(2)", "diagnostic severity level warning"}, ["dgi"] = { ":lua require'spike.diagnostics'.set_diagnostics_level(3)", "diagnostic severity level info"}, ["dgh"] = { ":lua require'spike.diagnostics'.set_diagnostics_level(4)", "diagnostic severity level hint"}, -- update nvchad -- ["uu"] = { " :NvChadUpdate ", "update nvchad" }, -- lua source current file ["."] = { " :w | source %", "save and source script " }, ["rm"] = { function() local ok, core = pcall(require, "core") if not ok then return end -- reload nvchad mappings require("plenary.reload").reload_module("core.utils") require("plenary.reload").reload_module("core.default_config") require("plenary.reload").reload_module("core.mappings") require("core.utils").load_mappings() print("mappings reloaded !") end, "config reload mappings" }, ["ss"] = { " mks! ", "save session" }, ["sl"] = { " source Session.vim ", "load session" }, ["tt"] = { function() require("base46").toggle_theme() end, "toggle theme", }, -- luasnip edit snippets ["sne"] = { 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 ["bb"] = { " enew ", "new buffer" }, ["bv"] = { " enew ", "new buffer" }, -- new tab [""] = { " tabe ", "new tab" }, -- Fast tab NOTE:these are used for screen movements -- [""] = { "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" }, -- Increase number is with double and decrease with simple C-x -- yank from cusor to eol to system and primary clipboard -- Y handles until end of line -- yy handles linewise -- ["y"] = { '"*y$"+y$', "yank from cursor to eol to primary and clipboard" }, -- folding levels -- ["fd"] = { function() -- vim.ui.select({"fold level 0", "1", "2", "3", "4", "5", "6", "7"}, -- { -- prompt = "fold lvl: ", -- }, -- function(item, idx) -- P(idx) -- -- local foldlevel = tonumber(item) -- -- if foldlevel == nil then P("need number for fold level !") end -- -- vim.o.foldlevel = foldlevel -- end) -- end, -- -- "set fold level"}, ["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" }, ["tf"] = { " set foldmethod=expr| set foldexpr=nvim_treesitter#foldexpr()", "enable Treesitter folding" }, ["tp"] = { function() vim.cmd("TSPlaygroundToggle") end, "Treesitter playground" }, -- Moving lines around [""] = { ":m +1==", "move line up" }, [""] = { ":m .-2==", "move line up" }, -- syntax-tree-surfer -- visual selection from nomral mode ["vm"] = { "STSSelectMasterNode", "select master node" }, ["vn"] = { "STSSelectCurrentNode", "select current node" }, -- normal mode swapping -- swappint up/down ["vU"] = { function() vim.opt.opfunc = "v:lua.STSSwapUpNormal_Dot" return "g@l" end, "TS swap Up master node with sibling", opts = { expr = true } }, [""] = { function() vim.opt.opfunc = "v:lua.STSSwapUpNormal_Dot" return "g@l" end, "TS swap Up master node with sibling", opts = { expr = true } }, ["vD"] = { function() vim.opt.opfunc = "v:lua.STSSwapDownNormal_Dot" return "g@l" end, "TS swap Down master node with sibling", opts = { expr = true } }, [""] = { function() vim.opt.opfunc = "v:lua.STSSwapDownNormal_Dot" return "g@l" end, "TS swap Down master node with sibling", opts = { expr = true } }, -- swapping left/right sibling nodes [""] = { function() vim.opt.opfunc = "v:lua.STSSwapCurrentNodeNextNormal_Dot" return "g@l" end, "TS swap right with sibling", opts = { expr = true } }, [""] = { function() vim.opt.opfunc = "v:lua.STSSwapCurrentNodePrevNormal_Dot" return "g@l" end, "TS swap left with sibling", opts = { expr = true } }, ["]e"] = { " cn ", "quickfix next error" }, ["[e"] = { " cp ", "quickfix 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 -- -- PackerSnapshot ["pS"] = { function() local snapname = "snapshot_" .. os.date("%Y_%m_%d_%H%M") local packer = require 'packer' packer.snapshot(snapname) end , "packer snapshot" }, ["pst"] = { " PackerStatus", "packer status" }, ["psc"] = { " PackerSync", "packer sync" }, ["pc"] = { " PackerCompile", "packer compile" }, ["pr"] = { function() -- require("plenary.reload").reload_module("plugins") -- require("plenary.reload").reload_module("custom.plugins") -- vim.cmd "LuaCacheClear" -- package.loaded["plugins"] = nil -- -- package.loaded["custom.plugins"] = nil -- dofile(vim.fn.stdpath("config") .. '/lua/plugins/init.lua') -- dofile(vim.fn.stdpath("config") .. '/lua/custom/plugins/init.lua') -- require("spike.utils").unload_lua_ns("plugins") require("spike.utils").unload_lua_ns("custom") require("plugins") -- require("spike.utils").unload_lua_ns("custom") vim.cmd "PackerCompile" print("reloaded plugin config !") end, "packer reload/compile" }, -- 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" }, [""] = { " LspStart", "lsp enable" }, [""] = { " LspStop", "lsp disable" }, ["lst"] = { " LspStop", "lsp disable" }, --------------- -- Programming languages specifics --------------- -- config files ["ev"] = { " source ~/.config/nvim/Session.vim", "edit vim config" }, }, --}}} t = { [""] = { termcodes "", "escape terminal mode" } }, v = { --{{{ -- 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" }, ["%c"] = { "~/.config/nvim/", "shortcut to nvim config dir" }, -- ["tsf"] = { "set foldmethod=expr | set foldexpr=nvim_treesitter#foldexpr()", -- "enable Treesitter folding"} }, --}}} -- operator pending o = { ["S"] = { "(leap-forward-to)", opts = { remap = true} }, }, -- select mode (with completion) see after/plugin/mappings.* s = { [""] = {"i", "delete then go insert"}, }, -- visual exclusive mode (ignore select) x = { -- {{{ -- ["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 } }, -- syntax-tree-surfer ["J"] = { "STSSelectNextSiblingNode", "select next sibling node" }, ["K"] = { "STSSelectPrevSiblingNode", "select prev sibling node" }, ["H"] = { "STSSelectParentNode", "select prev sibling node" }, ["L"] = { "STSSelectChildNode", "select prev sibling node" }, -- swap nodes tip: start first with master/child node selection then use these [""] = { "STSSwapPrevVisual", "swap prev sibling node" }, [""] = { "STSSwapPrevVisual", "swap prev sibling node" }, [""] = { "STSSwapNextVisual", "swap next sibling node" }, [""] = { "STSSwapNextVisual", "swap next sibling node" }, }, -- }}} } --}}} 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.dap = { -- {{{ plugin = true, n = { ["ds"] = { function() local mydap = require("spike.dap") mydap.setup() require('spike.dap.utils').init_breakpoints() -- set a breakpoint at current line if there are none in -- the project if vim.o.filetype == "go" then mydap.go_debug() elseif vim.o.filetype == "rust" then local rt = require("rust-tools") -- make sure lsp is running ? rt.debuggables.debuggables() end end, "start dap session" }, ["dS"] = { function() if vim.o.filetype == "go" then vim.cmd("GoDbgStop") end end, "stop dap session" }, ["dd"] = { " DapToggleBreakpoint " }, ["dc"] = { function() vim.ui.input({ prompt = "condition> " }, function(input) require("dap").set_breakpoint(input) end) end, "dap conditional breakpoint" }, ["dm"] = { function() require('spike.dap.dapmode').start() end, "enter dap mode" }, ["dr"] = { "lua require'dap'.run_last()", "[dap] rerun last" }, ["dl"] = { function() require('spike.dap.utils').dap_logpoint() end, "[dap] add log point" }, ["dt"] = { "lua require'dapui'.toggle()", "[dap] toggle UI" }, }, } -- }}} M.nvimtree = { --{{{ plugin = true, n = { -- toggle [""] = { " NvimTreeToggle ", "toggle nvimtree" }, }, } --}}} M.fzf_lua = { --{{{ plugin = true, n = { -- find -- [""] = { " FzfLua files ", "FzfLua find files" }, -- [""] = { function () -- local ignored_bufs = { -- "qf", -- } -- for _, ignored in ipairs(ignored_bufs) do -- if vim.bo.filetype == ignored then -- local default_keyseq = termcodes("") -- vim.api.nvim_feedkeys(default_keyseq, 'n', false) -- return -- end -- end -- vim.cmd "FzfLua files" -- end, "FzfLua find files" }, ["fl"] = { " FzfLua lines ", "FzfLua grep open buffer lines" }, -- grep -- ["fw"] = { " FzfLua grep_cword ", "FzfLua grep cword" }, ["ff"] = { " 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 builtin ", "FzfLua builtins" }, -- ["fh"] = { " FzfLua help_tags ", "FzfLua find help pages" }, -- ["fm"] = { " FzfLua marks ", "FzfLua marks" }, -- ["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" }, [""] = { function() local ignored_bufs = { "qf", "guihua", "NvimT*", "aerial*", } for _, ignored in ipairs(ignored_bufs) do if vim.o.filetype:match(ignored) then local default_keyseq = termcodes("") vim.api.nvim_feedkeys(default_keyseq, 'n', false) return end end vim.cmd "Telescope find_files" end, "FzfLua find files" }, ["f."] = { " Telescope live_grep ", "telescope live grep" }, ["fw"] = { " Telescope grep_string ", "telescope grep cword" }, [";"] = { " Telescope buffers ", "telescope find buffers" }, ["fb"] = { " Telescope builtin ", "telescope builtins" }, ["fB"] = { " Telescope vim_bookmarks ", "telescope bookmarks" }, ["fh"] = { " Telescope help_tags ", "help page" }, ["fo"] = { " Telescope oldfiles ", "telescope find oldfiles" }, ["fm"] = { " Telescope marks ", "Telescope marks" }, ["fM"] = { " Telescope man_pages ", "Telescope marks" }, ["tk"] = { " Telescope keymaps ", "Telescope show keys" }, ["fr"] = { " Telescope resume ", "telescope resume last search" }, ["fc"] = { " Telescope commands ", "telescope commands" }, -- git ["fg"] = { " ", "telescope git commands" }, ["fgc"] = { " Telescope git_commits ", "teles git commits" }, ["fgs"] = { " Telescope git_status ", "teles git status" }, ["fgf"] = { " Telescope git_files ", "teles git files" }, -- 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", }, -- Running commands ["rf"] = {function() local nvterm_utils = require('spike.utils.nvterm') nvterm_utils.run_cmd(nil, { mode = "float" }) end, "run cmd in floating terminal"}, ["rv"] = {function() local nvterm_utils = require('spike.utils.nvterm') nvterm_utils.run_cmd(nil, { mode = "vertical" }) end, "run cmd in floating terminal"}, [""] = {function() local nvterm_utils = require('spike.utils.nvterm') nvterm_utils.rerun_last_cmd() end, "rerun last float term cmd"}, }, } --}}} 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 = { ["k"] = { 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", }, }, } --}}} -- code outline panel M.aerial = { plugin = true, n = { [""] = { " AerialToggle right" }, } } M.asyncrun = { --{{{ plugin = true, n = { -- TODO: find new mapping to close quickfix -- ["``"] = { " call asyncrun#quickfix_toggle(8)", "toggle quickfix window" }, -- HELP: -- adding ! after AsyncRun disables autoscroll ["m"] = { ":AsyncRun -program=" .. vim.o.makeprg .. "", "make using quickfix asyncrun" }, ["mf"] = { function() require('spike.utils.nvterm').run_cmd(vim.o.makeprg, { mode = "float"} ) end, "run make in a floating terminal" }, ["rx"] = {function() vim.ui.input( { prompt="tmux cmd:> " }, function (input) vim.cmd("AsyncRun -mode=term -pos=tmux " .. input) end) end, "custom asyncrun command (tmux)" }, ["pd"] = { " AsyncRun lpr -P PDF_PRINT %", "PDF print file" }, ["pp"] = { " AsyncRun lpr %" }, }, } --}}} M.overseer = { plugin = true, n = { ["oo"] = {" OverseerOpen ", "open overseer"}, ["ot"] = {" OverseerToggle ", "open overseer"}, } } M.vim_bookmarks = { --{{{ n = { ["m"] = { " Telescope vim_bookmarks", "show bookmarks" }, ["mk"] = { " BookmarkToggle", "toggle bookmarks" }, ["mm"] = { " BookmarkAnnotate", "annotation bookmarks" }, ["mc"] = { " BookmarkClear", "clear bookmarks in buffer" }, ["mx"] = { " BookmarkClearAll", "clear bookmarks in all buffers" }, ["]b"] = { "BookmarkNext", "jump to next bookmark" }, ["[b"] = { "BookmarkNext", "jump to prev bookmark" }, }, } --}}} M.iron = { -- {{{{{{ plugin = true, n = { ["ir"] = { "IronRepl", "start IronRepl" }, } } -- }}} -- -- color picker M.ccc = { plugin = true, n = { ["cp"] = { "CccPick", "color picker" } }, } -- }}} -- M.neorepl = {{{{ -- plugin = true, -- -- i = { -- ["C-p"] = { "(neorepl-hist-prev)"}, -- } -- -- } -- }}} M.vimux = { plugin = true, n = { -- rerun last [""] = { "VimuxRunLastCommand", "vimux run last command" }, -- prompt ["vv"] = { "VimuxPromptCommand", "vimux prompt command" }, ["vc"] = { "VimuxInterruptRunner", "vimux interrupt command" }, ["vl"] = { "VimuxClearTerminalScreen", "vimux clear terminal" }, ["vx"] = { "VimuxCloseRunner", "vimux close runner" }, } } -- extra mappings for golang M.golang = { plugin = true, n = { ["da"] = { " GoDebug -a", "go debug attach" }, } } M["todo-comments"] = { plugin = true, n = { ["]t"] = { " lua require'todo-comments'.jump_next()", "jump to next todo" }, ["[t"] = { " lua require'todo-comments'.jump_prev()", "jump to prev todo" } } } -- git M.gitsigns = { plugin = true, n = { ["gs"] = { " lua require'gitsigns'.stage_hunk()", "Git stage hunk", }, ["gS"] = { " lua require'gitsigns'.stage_buffer()", "Git stage buffer", }, ["gR"] = { " lua require'gitsigns'.reset_buffer_index()", "Git reset buffer index", }, ["gp"] = { " lua require'gitsigns'.preview_hunk()", "Git preview hunk", }, ["gu"] = { " lua require'gitsigns'.undo_stage_hunk()", "Git undo stage hunk", }, ["]h"] = { " lua require'gitsigns'.next_hunk()", "Git next hunk", }, ["[h"] = { " lua require'gitsigns'.prev_hunk()", "Git prev hunk", } } } M.grapple = { plugin = true, n = { [",J"] = { " lua require'grapple'.cycle_forward()" }, [",K"] = { " lua require'grapple'.cycle_backward()" }, [",T"] = { " GrappleTag"}, [",N"] = { function() vim.ui.input({ prompt = "tag: " }, function(input) require("grapple").tag({ name = input }) end) end, "grapple tag with name" }, --TODO: keybind for popup select names [",,m"] = { " lua require'grapple'.select({name='mappings'})" }, [",,p"] = { " lua require'grapple'.select({name='plugins'})" }, [",,P"] = { " lua require'grapple'.select({name='Plugins'})" }, } } local function get_zk_notedirs() local abs_dirs = vim.fn.system("fd . -t d " .. vim.env['ZK_NOTEBOOK_DIR']) local note_dirs = {} for _,v in ipairs(vim.split(abs_dirs, "\n")) do local ndir = string.gsub(v, vim.env['ZK_NOTEBOOK_DIR'] .. '/', '') ndir = ndir:gsub("(.*)(/)$", "%1") if ndir ~= "" then table.insert(note_dirs,ndir) end end vim.ui.select(note_dirs, { prompt = "dir:> " }, function(choice) if choice then require("zk.commands").get("ZkNew")({ dir = choice }) end end) end M.zk = { plugin = true, n = { ["zk"] = {function() vim.ui.input({ prompt = "note title:"}, function (input) if input then require("zk.commands").get("ZkNew")({ title = input}) end end) end, "zk new note"}, ["zK"] = {get_zk_notedirs, "zk new note, custom dir"}, ["zo"] = {"ZkNotes { sort = { 'modified' }}","zk list notes"}, -- ["zf"] = {"ZkNotes { sort = { 'modified' }, match = vim.fn.input('Search: ') }","zk notes matching a given query"}, ["zf"] = {function() vim.ui.input({ prompt = "zk match:"}, function (input) if input then require("zk.commands").get("ZkNotes")({ sort = { "modified" }, match = input}) end end) end,"zk notes matching a given query"}, ["zl"] = {"ZkLinks","zk links"}, ["zh"] = {"ZkBacklinks","zk backlinks"}, -- mappings to lsp commands are in zk.lua config file } } return M