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.

Plugin Management Management

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.

3rd Party Plugin Managers 3rd Party

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

Coding (C++, Python) Coding

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
asynctasks.vim 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 vim-clap or vim-fzf
braceless commands, text objects and visual aides for coding in whitespace-aware languages like Python
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, expressions, watchs.

Similar to, but more user friendly and feature-rich than VIM's termdebug package. I found that it just works without any setup hassle.

Doxygen Toolkit

Productivity & Automation Productivity

vim-clap

Generic finder and dispatcher (like vim-fzf). Lets you fuzzy find files, commands, help topics, …

Still very young, but seems very promising and works smoothly.

You should use it together with the insanely fast ripgrep (instead of grep) as file system crawler.

vim-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 VCS

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.
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 mappings like nnoremap <silent> M *``cgn in your 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.

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.)
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.

UI Enhancements 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), …
TMUX Navigator Seamless window/split navigation between TMUX windows and VIM windows.
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).

Filetype/Language Plugins Filetypes

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 a fuzzy finder like vim-clap (nowadays) or vim-fzf (in the past) for file opening, buffer switching, etc.

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

My VIM Plugins My Plugins

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, Args, CHistory, Changes, Registers, Messages, SpellSuggestions, Undo, Unicode Chars, Tasks, …)

Learning VIM & Scripting Learning

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 URLs

Command Line Tools Install Tools (Ubuntu 18+)

fzf
sudo apt-get install -y fzf
ripgrep
sudo apt-get install -y ripgrep
tig
sudo apt-get install -y tig

All Plugin Repositories Repositories

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