-------------------------------------------------------------------------------- -- Development -------------------------------------------------------------------------------- -- Tools for supporting development, excluding language-specific which should -- go in `lang-.lua`. -- return { -------------------------------------------------------------------------------- -- Debugging -------------------------------------------------------------------------------- { name = 'vim-vdebug/vdebug', keys = { { mode = 'n', key = { '', 'd', 'd' }, group = true, label = 'debugger' }, { mode = 'v', key = { '', 'd', 'd' }, group = true, label = 'debugger' }, { mode = 'n', key = { '' }, virtual = true, label = 'start debugger' }, { mode = 'n', key = { '' }, virtual = true, label = 'set breakpoint' }, { mode = 'n', key = { '', 'd', 'd', 'b' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):setBreakpoint()', label = 'toggle breakpoint' }, { mode = 'n', key = { '', 'd', 'd', 'c' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):setConditionalBreakpoint()', label = 'conditional breakpoint' }, { mode = 'n', key = { '', 'd', 'd', 't' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):startTrace()', label = 'trace expression' }, { mode = 'v', key = { '', 'd', 'd', 't' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):startTrace()', label = 'trace expression' }, { mode = 'n', key = { '', 'd', 'd', 'e' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):eval()', label = 'eval code' }, { mode = 'v', key = { '', 'd', 'd', 'e' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):eval()', label = 'eval code' }, { mode = 'n', key = { '', 'd', 'd', 'w' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):showBreakpoints()', label = 'show breakpoints' }, } }, -------------------------------------------------------------------------------- -- Editing -------------------------------------------------------------------------------- -- Things that make the actual typing experience better. ---------------------------------------------------------------------------- -- .editorconfig -- -- Load and respect the .editorconfig file in projects -- { name = 'editorconfig/editorconfig-vim' }, -------------------------------------------------------------------------------- -- Intellisense -------------------------------------------------------------------------------- -- Things that provide code insights and completion. ---------------------------------------------------------------------------- -- Code completion provider -- -- Provides completions for a whole bunch of stuff, managed separately through -- the coc package.json -- { name = 'neoclide/coc.nvim', -- Only enable this plugin if npm is installed requires = { 'npm' }, config = { branch = 'master', ['do'] = 'npm install' }, keys = { { mode = 'n', key = { '', 'c', 'r' }, map = ":call CocAction('jumpReferences')", label = "references" }, } }, ---------------------------------------------------------------------------- -- Code tag sidebar -- -- Provides a UI for browsing code "tags" (classes, functions, etc) in the -- currently open file. -- { name = 'preservim/tagbar', requires = { 'ctags' }, config = { ['on'] = { 'TagbarToggle', 'TagbarOpen', 'TagbarOpenAutoClose' } }, -- keys = { -- { mode = 'n', key = { '', 't' }, map = ':TagbarOpenAutoClose', label = 'Show File Structure' } -- } keys = { { mode = 'n', key = { '' }, map = ':TagbarOpenAutoClose', label = 'show tagbar' }, { mode = 'i', key = { '' }, map = ':TagbarOpenAutoClose', label = 'show tagbar' }, } }, -------------------------------------------------------------------------------- -- Projects -------------------------------------------------------------------------------- -- Things that make working with projects better. ---------------------------------------------------------------------------- -- Making the working directory follow your projects -- -- Whenever you load a new file, changes the working directory to the -- nearest parent that has a `.git` folder in it, generally just working to -- automatically always be in your current project's folder. -- { name = 'airblade/vim-rooter' }, ---------------------------------------------------------------------------- -- Trouble - Show a todo list and list of errors from the lsp -- { name = 'kyazdani42/nvim-web-devicons' }, { name = 'folke/trouble.nvim', config = { branch = 'main' } }, ---------------------------------------------------------------------------- -- Todo Comments -- -- Find todo/fixme/etc and highlight them, and allow viewing a list -- project-wide { name = 'folke/todo-comments.nvim', config = { branch = "main" }, keys = { { mode = 'n', key = { '', 'w', 't' }, map = ':TodoTrouble', label = "todos" }, } }, -------------------------------------------------------------------------------- -- UI -------------------------------------------------------------------------------- -- Things that make the UI nicer. ---------------------------------------------------------------------------- -- Collect scope at the top of the editor to maintain context -- -- E.g., as you scroll down, if you're within a function() whose -- declaration has scrolled off-screen, this will pin it to the top of the -- editor so it's always visible. -- { enable = false, name = 'wellle/context.vim' }, -------------------------------------------------------------------------------- -- Tool: Git -------------------------------------------------------------------------------- -- Things that make your git experience better. ---------------------------------------------------------------------------- -- Git Wrapper -- -- Adds a :G command that allows you to specify most git commands and have -- them do sensible things from within vim with a vim-y interface. -- { name = 'tpope/vim-fugitive', -- Only enable if git is installed requires = { 'git' }, config = { ['on'] = { 'G', 'Gdiffsplit', 'GDelete' } }, -- Put a bunch of stuff in the menu keys = { { mode = 'n', key = { '', 'g', 'b' }, map = ':G blame', label = 'blame' }, { mode = 'n', key = { '', 'g', 'd' }, map = ':Gdiffsplit', label = 'diff' }, { mode = 'n', key = { '', 'g', 'l' }, map = ':G log', label = 'log' }, { mode = 'n', key = { '', 'g', 'r' }, map = ':GDelete', label = 'rm' }, { mode = 'n', key = { '', 'g', 's' }, map = ':G', label = 'status' }, { mode = 'n', key = { '', 'g', 'a' }, map = ':G add %', label = 'add' }, { mode = 'n', key = { '', 'g', 'c' }, map = ':G commit', label = 'commit' }, { mode = 'n', key = { '', 'g', 'p' }, map = ':G push', label = 'push' }, { mode = 'n', key = { '', 'g', 'x' }, map = ':lua nukevim.modules:get("tpope/vim-fugitive"):on_change_branch()', label = 'change branch' }, { mode = 'n', key = { '', 'g', 'z' }, map = ':lua nukevim.modules:get("tpope/vim-fugitive"):on_checkout()', label = 'checkout', without = { 'nvim-telescope/telescope.nvim' } }, } }, ---------------------------------------------------------------------------- -- Better log browsing -- -- Show the commit history of the repo in the usual branching tree type -- list. -- { name = 'junegunn/gv.vim', requires = { 'git' }, keys = { { mode = 'n', key = { '', 'g', 'g' }, map = ':GV', label = 'graph' } } }, ---------------------------------------------------------------------------- -- Show line-by-line changes in the editor -- -- Shows +/-/~ in the gutter to signify line-level changes versus the most -- recent commit and provides tools for working with hunks. -- { name = 'airblade/vim-gitgutter', requires = { 'git' }, keys = { { mode = 'n', key = { '', 'g', 'r' }, map = '(GitGutterPrevHunk)', label = 'previous hunk' }, { mode = 'n', key = { '', 'g', 'f' }, map = '(GitGutterNextHunk)', label = 'next hunk' }, { mode = 'n', key = { '', 'g', 't' }, map = '(GitGutterStageHunk)', label = 'stage hunk' }, { mode = 'n', key = { '', 'g', 'y' }, map = '(GitGutterPreviewHunk)', label = 'preview hunk' }, } }, ---------------------------------------------------------------------------- -- Show blame on each line -- -- vscode style codelens blame shown on each line after a delay -- { name = 'apzelos/blamer.nvim', requires = { 'git' }, -- config = { -- ['on'] = { 'BlamerToggle' } -- }, keys = { { mode = 'n', key = { '', 'g', 'w' }, map = 'BlamerToggle', label = 'toggle inline blame' }, } }, -------------------------------------------------------------------------------- -- Tool: Docker -------------------------------------------------------------------------------- -- Things that make your docker experience better. ---------------------------------------------------------------------------- -- Pure vimscript docker container management -- -- This plugin is disabled by default as I prefer the "denops-docker" listed -- below, but if you can't/won't install deno then this is an option. -- { enable = false, name = 'kkvh/vim-docker-tools', requires = { 'docker' }, config = { ['on'] = { 'DockerToolsOpen', 'DockerToolsToggle' } }, keys = { { mode = 'n', key = { '', 'd', 'c' }, map = ':below new:DockerToolsOpen', label = 'docker containers' } } }, ---------------------------------------------------------------------------- -- Docker container and image management -- -- This plugin seems a little more polished and full-featured, so as long -- as deno is available enable this instead. -- { enable = true, name = 'skanehira/denops-docker.vim', config = { branch = 'main', ['on'] = { 'DockerContainers', 'DockerImages' } }, requires = { 'deno', 'docker' }, keys = { { mode = 'n', key = { '', 'd', 'c' }, map = ':below new:DockerContainers8_', options = { silent = true }, label = 'docker containers' }, { mode = 'n', key = { '', 'd', 'i' }, map = ':below new:DockerImages8_', options = { silent = true }, label = 'docker images' }, { filetype = 'docker-containers', mode = 'n', key = { 'u' }, label = 'start', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { 'd' }, label = 'stop', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { '' }, label = 'kill', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { 'a' }, label = 'terminal', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { 't' }, label = 'log', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { '' }, label = 'delete', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { 'q' }, label = 'close window', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { 'r' }, label = 'restart', virtual = true }, { filetype = 'docker-containers', mode = 'n', key = { '' }, label = 'inspect', virtual = true }, { filetype = 'docker-images', mode = 'n', key = { '' }, label = 'inspect', virtual = true }, { filetype = 'docker-images', mode = 'n', key = { '' }, label = 'delete', virtual = true }, { filetype = 'docker-images', mode = 'n', key = { 'r' }, label = 'run', virtual = true }, { filetype = 'docker-images', mode = 'n', key = { 'q' }, label = 'close window', virtual = true }, } }, }