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. Those that I find most useful or of high quality are marked with a star and those in bold are the ones I could not live/"vim" without.

VIM 8 or NeoVIM

  • create a folder named pack inside your .vim (vimfiles on Windows) configuration folder
  • direct subfolders of pack can 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.

Pathogen Very simple: can be used to add a bunch of plugin folders to VIM's runtimepath. Does neither download nor update plugins.
Vim-Plug can download and update plugins
Vundle can download and update plugins

ALE Superb 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.
works well with cquery, clangd, gcc
TComment (un-)commenting commands and text objects for selecting comments
braceless commands, text objects and visual aides for coding in whitespace-aware languages like Python, Haskell, etc.
AsyncTasks manage and excute tasks asynchronously (build, clean, run, …) based on simple taks files; different profiles for release, build, Linux, Windows, etc. possible; easy to integrate with FZF
Doxygen Toolkit
a.vim Switch between C or C++ source and header files.
This one is a classic, but a bit too slow and overrated in my estimation.

FZF VIM integration of the FZF fuzzy selection command line tool. Lets you fuzzy find files, commands, help topics, …
You should use it together with the insanely fast ripgrep (instead of grep) as file system crawler.
Quickfix Reflector Super intuitive mass-editing via quickfix list. Let's you
  • remove quickfix lines to reduce visual clutter.
  • edit quickfix entries with all VIM tools.
  • apply all changes to the actual target locations.

Version Control

Git Gutter Shows a git-based quick diff (working dir vs. HEAD) in the sign column. Also comes with a lot of usefule commands for hunk-wise staging, undoing etc. Could be faster, but you can turn it on and off as you see fit.
Fugitive A suite of git wrapper commands. Nowadays I use VIM's integrated terminal together with tig instead.
ConflictMotions Motions for navigating version control merge conflicts.

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.
EasyAlign Align text into columns; lots of neat options.
Textmanip Move or duplicate selections/lines around.
Angry 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.)
Replace With Register Replace a motion/text object with the contents of the default register without changing the register content.
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.)
Multiple Cursors For those who miss multi-cursor editing. I've come to like the VIM way of using the gn motion more. I have nnoremap M *``cgn in my vimrc to quickly replace the word under the curser. Since it can be repeated with ., one can jump to the next occurrence and replace it or use n to skip to the next occurrence without replacing. The plugin is also a bit sluggish; doesn't even come close to the smooth multi-cursor experience in SublimeText.
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,&hellip).
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.

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), …
TMUX Navigator Seamless window/split navigation between TMUX and VIM.
Search Index Shows the number of search pattern occurrences and the index of the current match for the current buffer in the command line.
Highlighted Yank Shortly flashes the text range that is selected by a yank command like yip. Speed and color can be configured.
BufExplorer Shows a list of all open,unlisted,etc. buffers and provides commands for managing them.
Signature Shows marks in the sign column.
UndoTree Show the undo tree and let's you navigate it (switch between revisions).

C++ enhances the built-in filetype plugin; adds additional keywords for modern C++
Qt C++ (additional keywords), qmake, qml, qbs, qrc xml, ui xml, ts xml
CSV
GCOV
HTML5

File Management

NERD Tree

A very popular file browsing plugin. 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've had enough bad experiences with netrw that I finally switched to NERDTree. That said, there's less of a need for a file drawer in VIM than you might think. I mostly use FZF for file opening, and :b or FZF's :Buffers for buffer switching.

Plugins augmenting NERD Tree:

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

Brace for Umlauts Makes the German QUERTZ keyboard more developer friendly by re-mapping the umlaut keys. I actually find that mapping üÜ[{, äÄ]}, and öÖ:\ results in an even better positioning of those characters than on QUERTY keyboards. Can be switched on and off.
AM Colors My preferred color scheme.
Toggle UI Elements Quick toggle commands for UI elements ( maximize editing area, toggle quickfix list, toggle location list, toggle statusbar, …).
FZF Extensions Some extensions for the VIM-FZF plugin for fuzzy browsing and selecting (CC, LL, Arglist, CHistory, Changes, Registers, Messages, SpellSuggestions, Undo, Unicode Chars, …)

Learn Vimscript The Hard Way excellent step-by-step tutorial with examples and exercises
Vimscript Snippets short examples for how to use the most common vimscript functions

All Tool & Plugin Sources/URLs
Tool & Plugin URLs

cd ~
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
sudo ~/.fzf/install
curl -LO https://github.com/BurntSushi/ripgrep/releases/download/0.8.1/ripgrep_0.8.1_amd64.deb
sudo dpkg -i ripgrep_0.8.1_amd64.deb
sudo apt-get install -y tig

https://github.com/Julian/vim-textobj-variable-segment
https://github.com/PhilRunninger/nerdtree-visual-selection
https://github.com/Shougo/vinarise.vim 
https://github.com/Xuyuanp/nerdtree-git-plugin
https://github.com/airblade/vim-gitgutter
https://github.com/ap/vim-css-color 
https://github.com/b4winckler/vim-angry 
https://github.com/bkad/CamelCaseMotion 
https://github.com/bounceme/poppy.vim 
https://github.com/chrisbra/csv.vim 
https://github.com/christoomey/vim-titlecase 
https://github.com/christoomey/vim-tmux-navigator 
https://github.com/coderifous/textobj-word-column.vim 
https://github.com/dhruvasagar/vim-table-mode 
https://github.com/fedorenchik/qt-support.vim 
https://github.com/google/vim-searchindex 
https://github.com/inkarkat/vim-SpellCheck 
https://github.com/itchyny/vim-cursorword 
https://github.com/jeetsukumaran/vim-indentwise 
https://github.com/jlanzarotta/bufexplorer 
https://github.com/joom/latex-unicoder.vim 
https://github.com/junegunn/fzf.vim
https://github.com/junegunn/vim-after-object 
https://github.com/junegunn/vim-easy-align 
https://github.com/junegunn/vim-plug 
https://github.com/kana/vim-niceblock 
https://github.com/kana/vim-textobj-line 
https://github.com/kshenoy/vim-signature 
https://github.com/kurkale6ka/vim-pairs 
https://github.com/machakann/vim-highlightedyank 
https://github.com/markonm/traces.vim
https://github.com/mbbill/undotree 
https://github.com/michaeljsmith/vim-indent-object 
https://github.com/muellan/am-colors 
https://github.com/muellan/vim-brace-for-umlauts 
https://github.com/muellan/vim-fzf-extensions
https://github.com/muellan/vim-toggle-ui-elements 
https://github.com/octol/vim-cpp-enhanced-highlight 
https://github.com/othree/html5.vim 
https://github.com/qpkorr/vim-renamer 
https://github.com/rbonvall/vim-textobj-latex 
https://github.com/reedes/vim-pencil 
https://github.com/rhysd/clever-f.vim 
https://github.com/scrooloose/nerdtree 
https://github.com/skywind3000/asynctasks.vim
https://github.com/stefandtw/quickfix-reflector.vim 
https://github.com/t9md/vim-textmanip 
https://github.com/terryma/vim-multiple-cursors 
https://github.com/tommcdo/vim-exchange 
https://github.com/tomtom/tcomment_vim 
https://github.com/tpope/vim-abolish 
https://github.com/tpope/vim-endwise 
https://github.com/tpope/vim-fugitive 
https://github.com/tpope/vim-repeat 
https://github.com/tpope/vim-surround 
https://github.com/tweekmonster/braceless.vim
https://github.com/vim-scripts/ConflictMotions 
https://github.com/vim-scripts/DoxygenToolkit.vim 
https://github.com/vim-scripts/GCov-plugin 
https://github.com/vim-scripts/ReplaceWithRegister 
https://github.com/vim-scripts/a.vim/blob/master/plugin/a.vim 
https://github.com/vim-utils/vim-space 
https://github.com/w0rp/ale 
https://github.com/will133/vim-dirdiff 
https://github.com/zef/vim-cycle