VIM Plugins
This list contains all VIM plugins that I’ve used at some time in the past and found potentially helpful and of sufficient quality.
Nowadays I only load a small set of plugins at startup and add whatever
I need on demand with VIM 8's :packadd. I think that a lot of
VIM plugins out there aren't very useful anyways. They either
replicate features that are already available in vanilla VIM or try to
do things in a very un-vimmy
way.
Management
VIM 8 or NeoVIM
- create a folder named
packinside your.vim(vimfileson Windows) configuration folder - direct subfolders of
packcan be used to organize packages/plugins into collections (e.g., text editing, file management, …) put plugins that should be loaded at startup into
.vim/pack/<collection>/start/<plugin>put plugins that should be added on demand with :packadd into
.vim/pack/<collection>/opt/<plugin>
See here for more.
3rd Party
Productivity
vim-clap
Generic fuzzy finder and dispatcher. A more modern and faster alternative to vim-fzf). Lets you find files, commands, help topics, …
You should use it together with the insanely fast
ripgrep
(instead of grep) as file system crawler.
I've whipped up a few
additional clap providers
for args, changes, chistory, lhistory, options, packages, spellfix, tabs, undo,
tasks lsp_symbols, unicode, thesauraus. Not super-well tested.
Quickfix Reflector
Super intuitive mass-editing within hundreds of files using VIM's quickfix list.
- use grep or any other method to populate the quickfix list with file locations
- edit quickfix entries with all VIM tools (change, substitute, ...)
- or remove quickfix lines of files that you don't want to be affected by changes
- apply all changes to the actual target locations by saving the quickfist lit
Coding
yeggapan-LSP
Language Server Protocol Client
- written in fast Vim9 script (requires Vim v9)
- supports more LSP features than most other LSP plugins and ALE
- code completion (auto or manual)
- live highlighting of variable occurrences, read/write access
- popup 'peek' at definition/declararion/etc.
- inline annotations (virtual text)
- inlay hints, like type annotations for
autovariables - fuzzy code symbol search
- snippet completion (supports vsnip/ultisnips plugins)
- works well with
clangdand various other language servers - highly customizable
- also supports integration with ALE (if you really want to use both)
ALE
Great integration of linters, compilers as linters, fixers/formatting tools and LSP language servers (as linters and for completion and code navigation). Requires VIM 8 or NeoVim.
Not really necessary (any more) if you use a fully featured LSP client.
- pure VimScript
- works well with
clangdorgcc - highly customizable
- can also be used alongside yeggapan-LSP
TComment
(un-)commenting commands and text objects for selecting comments
Vista
Provides a window for viewing and searching LSP symbols and/or tags. Similar, but faster and more feature rich than the classic tagbar plugin.
works well with LSP clients like yeggapan-LSP or ALE
vim-CMake
CMake integration
- adds CMake build window
- populates quickfix list with build errors
- enables easy switching between CMake build configurations
- autocompletion for build targets, build configurations and tests
- statusline information
SHSwitch
Switch between header and source file. Much better and more lightweight than the old 'a.vim' plugin but not needed if you use a good LSP client.
braceless
commands, text objects and visual aides for coding in whitespace-aware languages like Python
vim-cpp-modern
enhances the built-in filetype plugin; adds additional modern C++ keywords and language constructs
NeoDebug
Debug with gdb/pdb/lldb in VIM. Shows current instruction and breakpoints in code; windows for debugger console, locals, registers, stacks, threads, breakpoints, disassembly, watch expressions.
Similar to, but more user friendly and feature-rich than VIM's
termdebug package.
I found that it just works
without any setup hassle.
vim-textobj-ifdef
Text objects i#/a# (alternative i3/a3)
for C preprocessor regions delimited by
#ifdef, #ifndef, #else, #elif, #endif, etc.
unfortunately not well documented, but it works flawlessly
vim-vsnip
Code Snippets
- nested placeholders
- nested snippet expansion
- supports the VSCode snippet format and SnipMate-like syntax
- can load snippets from VSCode extensions
- works together with many completion/LSP plugins (also needs vim-vsnip-integ )
Qt
C++ (additional keywords), qmake, qml, qbs, qrc xml, ui xml, ts xml
Fugitive
A suite of git wrapper commands. Also a great tool for crafting git commits. Probably the best feature is a git status-like overview of all changes that allows staging/unstaging on file-level, hunk-level or line-level. Also allows calling of arbitrary git commands from VIM (with completion of commands, tags, etc.).
Can be augmented with "Rhubarb" which allows browsing files/commits/etc. on GitHub directly from VIM.
Git Gutter
Shows a git-based quick diff
(working dir vs. HEAD) in the sign column.
Also comes with a lot of useful commands for hunk-wise staging, undoing etc.
Could be a bit faster, but you can turn it on and off as you see fit.
ConflictMotions
Motions for navigating version control merge conflicts.
Git-Lens
A vim9 plugin inspired by VCCode's GitLens. Auto-displays time of change, author and commit message on any line of code.
Text Editing
Repeat
Repeat more actions with the . command.
Should be built-in.
Surround
Commands & text objects for surrounding selections with parentheses, braces, quotes, XML tags, …
A must have for coding; should be built-in.
Exchange
Exchange the contents of selections/text objects.
Should be built-in.
Pencil
Makes writing prose in VIM a lot less painful.
CleverF
Improves the f/t commands in a very intuitive way and also frees up the , and ; keys.
vim-visual-multi
Multiple Cursors for VIM. For the occasions when VIM's gn motion isn't powerful enough or you need more visual feedback.
Very nice plugin! Substantially faster, less buggy, better visual feedback and a lot more features than the old Multiple Cursors plugin. Actually the first incarnation of multiple cursors in VIM that I really like.
As an alternative to multiple cursor editing you can put a mapping like nnoremap <silent> M *``cgn in your vimrc to quickly replace the word under the cursor by pressing M. This can be repeated with ., so one can jump to and replace the next occurrence or use n to skip to the next occurrence without replacing.
EasyAlign
Align text into columns; lots of neat options.
Textmanip
Move or duplicate selections/lines around.
Argument Text Object
Text objects for comma-separated regions; e.g., in function parameter lists.
CamelCaseMotion
Motions based on sub-words in CamelCase, snake_case, dash-case, etc.
Variable Segment Text Object
Text objects that select sub-words in CamelCase, snake_case, dash-case, etc.
Pairs Text Object
Adds several text objects for regions that are delimited by quotes, points, etc.
Niceblock
Makes block-wise prepending/appending with I and A available in all visual modes (not just block-wise mode). Should probably also be built-in functionality.
Indent Text Object
Text objects based on the current indent level. Great for indentation-based languages or markup (Python, HAML, etc.)
Surround-Funk
Commands & text objects for changing/deleting/yanking surrounding function names or function calls (name + arguments in parentheses).
You should make sure that the mappings don't interfere with the classic Surround plugin (esp. ys). You can simply deactivate the defaults and define mappings in the vimrc (just copy them from the readme and adapt them to your liking).
Replace With Register
Replace a motion/text object with the contents of the default register without changing the register content.
Tip: In Vim 9 you can use upper case P in visual mode to paste without affecting registers.
IndentWise
Motions based on indent levels. Lets you jump to prev/next block with same/less/more indent.
Endwise
Automatically insert end-of-block delimiters in languages that
don't use braces (fi, endfunction, etc.)
abolish
Easily search for, substitute, and abbreviate multiple variants of a word.
Has a nice coerce
feature that let's you transform
between case styles (snake_case, CamelCase,
Title Case).
SpellCheck
Collects all spelling errors in the quickfix list.
Cycle
A vim plugin to toggle words between pairs or lists of related words.
TableMode
Useful if you have to work with a lot of Markdown tables.
Whitespace Text Object
Let's you quickly delete/select contiguous regions of whitespace.
Word Column Text Object
Text object for selecting whitespace-separated columns. Useful for working with tab-separated data.
LaTeX Text Object
Text objects for various LaTeX regions (math, environments,…).
LaTeX Unicoder
A plugin to type Unicode chars in Vim, using their LaTeX names.
Line Text Object
Adds a text object for selecting the content of the current line (without the whitespace before and after).
After Text Object
Adds text object to select text after designated characters.
Titlecase
Teach Vim about Title Case
, with support for motions and
text objects.
Vinarise
Hex editing for VIM.
UI
Traces
Live highlight of patterns and range commands (substitute, global, …). Super useful when crafting complex regex searches and/or replacements. Should be built-in functionality.
Poppy
Highlights different levels of matching delimiters (parentheses, braces, …) in different colors.
Cursorword
Underlines all occurrences of the word under the cursor. Fast; useful for spotting spelling errors in code and redundancy in prose.
CssColor
Live preview of colors for constants like red,
#ffa, rgb(0,0,255), …
KiTTY Navigator
Seamless window/split navigation between KiTTY windows and VIM windows.
TMUX Navigator
Seamless window/split navigation between TMUX windows and VIM windows.
Highlighted Yank
Flashes the text range that is selected by a yank command like yip. Speed and color can be configured.
Matchup
Highlight/navigate to/delete/change matching delimiters including
if/else/endif/#ifdef/#endif pairs.
More reliable and feature rich replacement for VIM's standard plugins
matchit and matchparen.
Provides i%/a% text objects for any
delimiter,
ds% and cs% mappings for deleting and changing delimiters
(compatible with the
Surround plugin) and more.
Can display off-screen matches in the status line.
Supports many different languages.
BufExplorer
Shows a list of all open,unlisted,etc. buffers and provides commands for managing them.
Signature
Shows marks in the sign column.
Lets you also define additional markers with m1,
m2, etc. that can be on multiple lines at the same time (great for
tagging lines that belong to one topic
).
UndoTree
Show the undo tree and let's you navigate it (switch between revisions).
PopupScrollbar
Displays a scrollbar on the right side of the current window based on the popup window feature of newer VIM versions. Nice UI enhancement, especially if you are using VIM in the terminal.
There's also an alternative for NeoVIM .
Filetypes
vim-cpp-modern
enhances the built-in filetype plugin; adds additional modern C++ keywords and language constructs
Qt
C++ (additional keywords), qmake, qml, qbs, qrc xml, ui xml, ts xml
Bio Sequences
Supports FASTA, FASTQ, SAM, BAM, PAF; also gives information on SAM/BAM flags, scores, etc.
DXF
Highlighting for non-binary DXF Files
File Management
Believe it or not, VIM already has a built-in file manager called netrw
.
However some people (including me) feel that it is too clumsy to use.
I mostly use a fuzzy finder like vim-clap (nowadays) or vim-fzf (in the past) for file opening, buffer switching, etc. and EasyTree as tree viewer when exploring new and large projects.
EasyTree
Simple tree viewer that is faster than NERDTree in my experience.
- view and browse the file tree (same as NERDTree)
- create, delete, copy, move files and directories in usual VIM fashion (yank/paste)
- displays git status (untracked, modified, staged, etc.)
NERD Tree
Probably the most popular file explorer plugin.
Plugins augmenting NERD Tree:
nnn.vim
Integration of the excellent command line file explorer nnn into vim. Offers commands for file picking and a file explorer window. Substantially faster than NERD Tree and a no-brainer if you already use nnn (which you probably should).
File Renamer
Lets you (mass) rename files in a directory using vim editing commands. Can be quite useful and way faster and a lot more usable than other renaming tools or shell scripts.
dirdiff
vim-diff two directories
Color Schemes
Gruvbox8
An improved version of the original Gruvbox scheme . In comes in a light and a dark version each having 3 contrast modes.
The improved version loads faster, has better documentation and the 256 color version is a better approximation of the true color version than in the original Gruvbox scheme.
PaperColor
Light & dark color schemes.
Vim|One
Light and dark schemes based on the "One" color scheme for the Atom editor.
onedark
Dark color scheme based on the "One" color scheme for the Atom editor.
Solarized8
Improved version of the classic solarized scheme that loads faster. Comes in light and dark versions.
Nightfox
3 dark and 2 light schemes
vim-space-theme
dark and light schemes similar to solarized
Nord
dark blueish color scheme
Everforest
greenish color schemes; light & dark in three contrast levels
Tempus
collection of themes for Vim, text editors, and terminal emulators that are compliant at the very least with the WCAG AA accessibility standard for colour contrast
AM Colors
My personal color scheme(s). Dark scheme, light scheme and hight-contrast light scheme for presentations.
Vimcolorschemes
An aggregator site that lists colorschemes from GitHub. Shows preview images and let's you browse schemes by category (light, dark), recently updated, trending, top, etc.
Learning
All Tool & Plugin Sources/URLs Tool & Plugin URLs URLs
(Ubuntu 18+)
| sudo apt install -y fzf |
| sudo apt install -y ripgrep |
| sudo apt install -y tig |
git clone https://github.com/AndrewRadev/popup_scrollbar.vim.git
git clone https://github.com/BurntSushi/ripgrep.git
git clone https://github.com/EdenEast/nightfox.nvim.git
git clone https://github.com/Eliot00/git-lens.vim.git
git clone https://github.com/Julian/vim-textobj-variable-segment.git
git clone https://github.com/Matt-A-Bennett/vim-surround-funk.git
git clone https://github.com/NLKNguyen/papercolor-theme.git.git
git clone https://github.com/PhilRunninger/nerdtree-visual-selection.git
git clone https://github.com/Shougo/vinarise.vim.git
git clone https://github.com/VundleVim/Vundle.vim.git
git clone https://github.com/Xuyuanp/nerdtree-git-plugin.git
git clone https://github.com/Xuyuanp/scrollbar.nvim.git
git clone https://github.com/airblade/vim-gitgutter.git
git clone https://github.com/andymass/vim-matchup.git
git clone https://github.com/anyakichi/vim-textobj-ifdef.git.git
git clone https://github.com/ap/vim-css-color.git
git clone https://github.com/arcticicestudio/nord-vim.git
git clone https://github.com/b4winckler/vim-angry.git
git clone https://github.com/bfrg/vim-cpp-modern.git
git clone https://github.com/bkad/CamelCaseMotion.git
git clone https://github.com/bounceme/poppy.vim.git
git clone https://github.com/cdelledonne/vim-cmake.git
git clone https://github.com/chrisbra/csv.vim.git
git clone https://github.com/christoomey/vim-titlecase.git
git clone https://github.com/christoomey/vim-tmux-navigator.git
git clone https://github.com/coderifous/textobj-word-column.vim.git
git clone https://github.com/cpiger/NeoDebug.git
git clone https://github.com/dhruvasagar/vim-table-mode.git
git clone https://github.com/fedorenchik/qt-support.vim.git
git clone https://github.com/hrsh7th/vim-vsnip-integ.git
git clone https://github.com/hrsh7th/vim-vsnip.git
git clone https://github.com/inkarkat/vim-SpellCheck.git
git clone https://github.com/itchyny/vim-cursorword.git
git clone https://github.com/jarun/nnn.git
git clone https://github.com/jeetsukumaran/vim-indentwise.git
git clone https://github.com/jlanzarotta/bufexplorer.git
git clone https://github.com/joom/latex-unicoder.vim.git
git clone https://github.com/joshdick/onedark.vim.git
git clone https://github.com/junegunn/fzf.git
git clone https://github.com/junegunn/fzf.vim.git
git clone https://github.com/junegunn/vim-after-object.git
git clone https://github.com/junegunn/vim-easy-align.git
git clone https://github.com/junegunn/vim-plug.git
git clone https://github.com/kana/vim-niceblock.git
git clone https://github.com/kana/vim-textobj-line.git
git clone https://github.com/knubie/vim-kitty-navigator.git
git clone https://github.com/kshenoy/vim-signature.git
git clone https://github.com/kurkale6ka/vim-pairs.git
git clone https://github.com/kuznetsss/shswitch.git
git clone https://github.com/lifepillar/vim-gruvbox8.git
git clone https://github.com/lifepillar/vim-solarized8.git
git clone https://github.com/liuchengxu/space-vim-theme.git.git
git clone https://github.com/liuchengxu/vim-clap.git
git clone https://github.com/liuchengxu/vista.vim.git
git clone https://github.com/machakann/vim-highlightedyank.git
git clone https://github.com/markonm/traces.vim.git
git clone https://github.com/mbbill/undotree.git
git clone https://github.com/mcchrish/nnn.vim.git
git clone https://github.com/mg979/vim-visual-multi.git
git clone https://github.com/michaeljsmith/vim-indent-object.git
git clone https://github.com/mktle/dna.vim.git
git clone https://github.com/morhetz/gruvbox.git
git clone https://github.com/muellan/am-colors.git
git clone https://github.com/muellan/vim-clap-more.git
git clone https://github.com/muellan/vim-filetype-dxf.git
git clone https://github.com/othree/html5.vim.git
git clone https://github.com/qpkorr/vim-renamer.git
git clone https://github.com/rakr/vim-one.git
git clone https://github.com/rbonvall/vim-textobj-latex.git
git clone https://github.com/reedes/vim-pencil.git
git clone https://github.com/rhysd/clever-f.vim.git
git clone https://github.com/sainnhe/everforest.git
git clone https://github.com/scrooloose/nerdtree.git
git clone https://github.com/skywind3000/asynctasks.vim.git
git clone https://github.com/stefandtw/quickfix-reflector.vim.git
git clone https://github.com/t9md/vim-textmanip.git
git clone https://github.com/terryma/vim-multiple-cursors.git
git clone https://github.com/tommcdo/vim-exchange.git
git clone https://github.com/tomtom/tcomment_vim.git
git clone https://github.com/tpope/vim-abolish.git
git clone https://github.com/tpope/vim-endwise.git
git clone https://github.com/tpope/vim-fugitive.git
git clone https://github.com/tpope/vim-pathogen.git
git clone https://github.com/tpope/vim-repeat.git
git clone https://github.com/tpope/vim-rhubarb.git.git
git clone https://github.com/tpope/vim-surround.git
git clone https://github.com/troydm/easytree.vim.git
git clone https://github.com/tweekmonster/braceless.vim.git
git clone https://github.com/vim-scripts/ConflictMotions.git
git clone https://github.com/vim-scripts/DoxygenToolkit.vim.git
git clone https://github.com/vim-scripts/GCov-plugin.git
git clone https://github.com/vim-scripts/ReplaceWithRegister.git
git clone https://github.com/vim-utils/vim-space.git
git clone https://github.com/w0rp/ale.git
git clone https://github.com/will133/vim-dirdiff.git
git clone https://github.com/yegappan/lsp.git
git clone https://github.com/zef/vim-cycle.git
Comments…