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.
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.
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 |
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 |
Doxygen Toolkit |
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
|
vim-fzf | VIM integration of the
You should use it together with the insanely fast
|
Quickfix Reflector | Super intuitive mass-editing via quickfix list. Let's you
|
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 |
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. |
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). |
File Management
NERD Tree | A very popular file browsing plugin.
Believe it or not, VIM already has a built-in file manager called 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 |
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, …) |
Websites
-
excellent step-by-step tutorial with examples and exercises
-
short examples for how to use the most common vimscript functions
All Tool & Plugin Sources/URLs Tool & Plugin URLs URLs
(Ubuntu 18+)
| sudo apt-get install -y fzf |
| sudo apt-get install -y ripgrep |
| sudo apt-get install -y tig |
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
Comments