From Things and Stuff Wiki
Jump to navigation Jump to search


  • Vim - a highly configurable text editor for efficiently creating and changing any kind of text. It is included as "vi" with most UNIX systems and with Apple OS X. Vim is rock stable and is continuously being developed to become even better. Among its features are: persistent, multi-level undo tree; extensive plugin system; support for hundreds of programming languages and file formats powerful search and replace; integrates with many tools

Keystrokes can be chained together to combine actions, movements and selections into coolness. Folk using Vim 20 years still don't know it all. See also Emacs (though take care of your wrists).

  • Vim: help.txt - an HTML version of the Vim help pages, current as of Vim 8.1.1170. They are kept up-to-date automatically from the Vim source repository. Also included is the Vim FAQ, kept up to date from its github repository.

  # open vim help in a split window


  • - a foldable extensible 40-column cheat sheet that you may open in Vim by pressing <leader>? (the mapping is customizable, of course). Mappings and commands are organized like the menus of a GUI app: there is a File section, an Edit section, a View section, and so on. For each item the description comes first, because one typically wants to find how to execute a task, not what the meaning of a key sequence is (there is Vim's help for that). Syntax coloring and the use of conceal keep the cheat sheet clutter-free and easy to read.


  • Shortcut layout - a sample of movement/selection, layed out in their direction


  • YouTube: 7 Habits For Effective Text Editing 2.0 - "A large percentage of time behind the computer screen is spent on editing text. Investing a little time in learning more efficient ways to use a text editor pays itself back fairly quickly. This presentation will give an overview of the large number of ways of using Vim in a smart way to edit programs, structured text and documentation. Examples will be used to make clear how learning a limited number of habits will avoid wasting time and lower the number of mistakes. Bram Moolenaar is mostly known for being the benevolent dictator of the text editor Vim."



  • OpenVim - a web-based project to let people quickly have a taste what kind of an editor Vim is. Vim is considered to be very useful but can feel devastatingly opaque at first. Hopefully this tutorial makes people feel more comfortable to give it a chance. OpenVim is based on a custom engine that interprets vim commands. Fun fact: the engine operates directly on the dom but can be easily refactored to a model that is not view-dependent.

  • Vim Genius - Increase your speed and improve your muscle memory with Vim Genius, a timed flashcard-style game designed to make you faster in Vim. It’s free and you don’t need to sign up.

  • Snake Vim Trainer - Hone your vim navigation skillz. Make your Vim snake eat the food to increase your score. You can only eat food while INSERT mode is on. You cannot change direction while INSERT mode is on

  • Vim Master - Android app that was created in order to master the operation of vim editor. You can learn a vim operations in quiz format. There are three types of difficulty, Easy, Normal, and Hard. There are 150 questions in total. There are explanations for all questions. You can browse the history of the answered results of yours and other players. You can register your name as Vim Masters for the top grades. This app supports English and Japanese.

  • - Hard Mode is a plugin which disables the arrow keys, the hjkl keys, the page up/down keys, and a handful of other keys which allow one to rely on character-wise navigation. The philosophy behind Hard Mode is that you'll never master Vim's advanced motion and search functionality if you can fall back on the anti-pattern of fumbling around your code with the arrow keys.


  • VimGolf - Real Vim ninjas count every keystroke - do you? Head on over to, pick a challenge, and show us what you've got! Each challenge provides an input file, and an output file. Your goal is to modify the input file such that it matches the output. Once you install the vimgolf CLI, pick a challenge, open a prompt and put away! When you launch a challenge from the command line, it will be downloaded from the site and a local Vim session will be launched, which will log every keystroke you make. Once you're done, simply :wq (write and quit) the session and we will score your input and upload it back to the site!
gem install vimgolf
vimgolf setup
vimgolf put [challenge ID]

Packages and support



:map ;
  what is ; mapped to

:verbose  map ;
  include where ; is mapped from



:help Normal-mode


:help Insert-mode
  enter insert mode from normal mode

  enter replace mode - deletes selected character, enters insert then returns to normal after a new character has been entered
  perform normal mode command in insert mode
  copy character from line above

  copy character from line below


:help Visual-mode
  enter visual mode from normal mode
  enter visual linewise mode
  enter visual block mode


:help Select-mode

like the visual mode but with more CUA like behavior. if you type a single character it replaces the selection. you lose access to all one key operations on selections.

This mode is usually activated by:

:behave mswin
  activate select mode (default for MS-Windows installations)
:behave xterm
  return to normal mode


:help Command-line-mode
  enter command-line mode


:help Ex-mode
  enter :Ex mode

  exit :Ex mode
  beginning of line

  end of line
  # % = all lines, ! = external command, markdown = a md2html app

File operations

Command line

vim filename
  edit file (or create a buffer if file doesn't exist)

If you want to start vim with several files in a splitted window, just type;

vim -o a b c

for the horizontal split, and

vim -O a b c

for the vertical split.

  • - z for vim. uses viminfo's list of recently edited files to open one quickly no matter where you are in the filesystem. by default, it will open the most recently edited file matching all of the provided regular expressions.

In Vim

:e filename
  open filename in vim

:w filename
  save as
  quit if saved
  save if changed and quit, same as :wq
  save as above
  even if not saved (also :q!)
:ex .
  explore files in file directory. opens in split pans if file modified.
  as above but forces split
  as above but vertical split
  as above but in new tab

  open file
  open file in new split buffer


:echo @%
  directory/name of file
:echo expand('%:t')
  name of file ('tail')
:echo expand('%:p')
  full path
:echo expand('%:p:h')
  directory containing file ('head')

File navigation

:e .
  # bring up internal netrw file browser

  # toggle hidden files
  # cycle between types of files hidden

  # jump to home folder

  • - enhances netrw, partially in an attempt to mitigate the need for more disruptive "project drawer" style plugins. Some of the behaviors added by vinegar.vim would make excellent upstream additions. Many, the author would probably reject. Others are a bit too wild to even consider.


:set cursorline


  start of file
  end of file

  move to line 123
  move to line 123 (easier imo)
  line beginning
  first non-whitespace character
  line end
  forward to start next word
  forward to start of next WORD (ignoring hyphens, etc.)

  forward to end of word
  forward to end of WORD (ignoring hyphens, etc.)

  backward word
  backward WORD

  backward to the end of word [count] |inclusive|.
  backward to the end of WORD [count] |inclusive|. [15]
  beginning of previous sentence
  next sentence
  current brace
  beginning of previous
  next paragraph

  cursor to top of screen (high)
  cursor to middle of screen (middle)
  cursor to bottom of screen (low)
  move cursor down half-page
  move cursor up half-page 

  mark cursor position 'a'
  move to mark position 'a'

 Display the jump list for the current window with:
  move back location
  move forward location
  move down a soft linebreak line

  move back one edit list location
  move forward one edit list location

  centre screen on cursor
  move screen top to cursor
  move screen bottom to cursor
  Moves screen up one line
  Moves screen down one line
  Moves screen up ½ page
  Moves screen down ½ page
  Moves screen up one page
  Moves screen down one page [16]

  • - You know Readline key bindings? Of course you do, they're in your shell, your REPL, and perhaps even the GUI for your OS. They're similar to Emacs key bindings (C-a for home), but with several concessions for UNIX (C-w for delete word). With rsi.vim, I've taken that same concession philosophy and extended it to Vim. Get the most useful of the ubiquitous key bindings without blindly overriding built-in Vim functionality.

  • repmo.vim - repeat motions for which a count was given

Finding things

  search for text
  • - shows how many times does a search pattern occur in the current buffer. After each search, it displays total number of matches, as well as the index of a current match, in the command line:
  search for text under cursor

  repeat search forwards
  repeat search backwards

  move to next X on same line

  move to third last X on same line

  move to character before next X on same line

  move to second previous X on same line

  repeat find/to movement command
  repeat find/to movement in opposite direction

  • - adds the following behaviour to the default behaviour of the f, F, t, and T commands: Multiline - Can search across multiple lines or continue searching across multiple lines using ; and , keys, Smart Case - When the search character is lower case it matches both lower and upper case, and when the character is uppercase it matches only upper case. Allow repeating t and T commands using ; or , commands. Highlighting - Which is disabled automatically when moving your cursor afterwards. It's also worth noting that it only adds the new position to the jumplist if you've changed lines.

  • - a Vim plugin that enhances the builtin F f , T t and ; keys by allowing them to wrap over lines with the full gamut of normal, visual and operator pending mode supported. This is all the default configuration of Fanf,ingTastic; provides, however the following enhanced functionality can be enabled through configuration options: Case insensitivity: Fanf,ingTastic; is case sensitive by default but can be set to ignore case so that fx will match either x or X. Aliases: Fanf,ingTastic; allows you to create aliases which specify a set of characters that will be scanned for when FfTt;, is used on that alias

  • - extends f, F, t and T mappings for more convenience. Instead of ;, f is available to repeat after you type f{char} or F{char}. F after f{char} and F{char} is also available to undo a jump. t{char} and T{char} are ditto. This extension makes a repeat easier and makes you forget the existence of ;. You can use ; for other key mapping. In addition, this extension provides many convenient features like target character highlighting, smart case matching and so on.

  • - aims to make inline navigation effortless. The motion seek, summoned with s by default, is similar to f, but instead of one it expects two characters.

  • - provides a much simpler way to use some motions in vim. It takes the <number> out of <number>w or <number>f{char} by highlighting all possible choices and allowing you to press one key to jump directly to the target.

  • Command-T - plug-in for VIM provides an extremely fast, intuitive mechanism for opening files with a minimal number of keystrokes. It's named "Command-T" because it is inspired by the "Go to File" window bound to Command-T in TextMate. Files are selected by typing characters that appear in their paths, and are ordered by an algorithm which knows that characters that appear in certain locations (for example, immediately after a path separator) should be given more weight. [19]
  • FuzzyFinder - FuzzyFinder provides convenient ways to quickly reach the

buffer/file/command/bookmark/tag you want. FuzzyFinder searches with the fuzzy/partial pattern to which it converted an entered pattern.

  • ctrlp.vim - Full path fuzzy file, buffer, mru, tag, ... finder for Vim.

Line numbers


  repeat last change. doesn't work with plugin actions without script.
  insert at cursor
  insert at line beginning
  append after the cursor
  append at the end of the line
  add ('open') line below and insert
  add line above and insert
  delete character under cursor
  delete character before cursor
  change one character and insert

Delete, yank and paste

Cut, copy, paste.

  yank (copy) current text
  yank current line
  yank current line to system clipboard

  yank all lines to clipboard [21]

  delete and yank (cut)
  delete to (find) and including *
  delete character (alias: "x")
  delete current line including linebreak
  delete to end of word from cursor including space
  delete to end of word from cursor leaving spae
  delete to end of line from cursor

  delete inner word
  delete inner WORD
  delete word, up to delimiter
  delete WORD, including previous space
  delete inner sentence
  delete a sentence
  delete inner '(' ')' block
  delete a '(' ')' block
  delete inner paragraph
  delete a paragraph
  delete inner '{' '}' block
  delete a '{' '}' block
3dk would delete 4 lines in the upward direction
  delete line, yank to 'a' register
  delete line, append yank to 'a' register

  delete line to blackhole register (no yank)
  paste yanked text after cursor/line
  paste yanked text before cursor/line

  paste 'a' register
  paste last yanked (not deleted) item


c - change (delete and insert)

  delete current line including linebreak, insert
  delete to end of word from cursor, insert
  delete to end of line from cursor, insert
  delete inner word, insert
  change inner quoted string
  change inner brackets
  change inner contents of [].. ci], ci) for insert on closing bracket
  change an object
  change an object, including space
  change contents between opening and closing angle bracket tags


Selection highlighting.

  visual select text

  visual inner word
  visual inner word, toggle case
  visual inner paragraph
  visual, end of word, change highlighted

  visual select lines
  visual select a block

Vim now supports incrementing numbers in Visual mode. You can increment numbers by pressing CTRL-A, and decrement with CTRL-X. [22]


  undo last change
  undo whilst in insert mode 
  undo all changes to current line
  create new undo point


  # indent right

  # indent left
  # fix indentation for selection

  # fix indentation for one line

  # visual select lines, then reformat with =

" If you select one or more lines, you can use < and > for shifting them sidewards. Unfortunately you immediately lose the selection afterwards. You can use gv to reselect the last selection (see :h gv), thus you can work around it like this in your config:

 xnoremap <  <gv
 xnoremap >  >gv

Search and replace

:s/foo/bar/ - search and replace first occurrence
:s/foo/bar/s - search and replace, global current line
:%s/foo/bar/g - search and replace, global whole file
:%s/foo/bar/gc - search and replace, with confirm

Global action


:g/text string/d
  delete all lines with text string

:!g/text string/d
  delete all lines without text string [24]

  fast delete
  delete all lines without a #

qaq:g/pattern/y A
  Explanation qaq is a trick to clear register a (qa starts recording a macro to register a, then q stops recording, leaving a empty). y A is an Ex command (:help :y). It yanks the current line into register A (append to register a).


qa - start recording macro 'a', q - stop recording
qA - start appending to macro 'a'
@a - play macro a
@@ - execute again
3@a - play macro 3 thrice

:let @a='macrogoeshere' - write macro manually
Ctrl-R Ctrl-R a - insert mode
:let @a='Ctrl-R Ctrl-R a - edit existing macro

(macros are saved in registers)


  # list register contents

  # delete word into the a register
  # delete word into no register

  # system clipboard

  # last search
  # paste last search - allows the user to configure the number of yanked, deleted and changed text. A split window can be used to choose which element(s) from the yankring you wish to paste. Alternately after text has been pasted (using p), it can be replaced with a previous value from the yankring with a single key stroke.

  • - a lightweight implementation of the Emacs 'kill ring' for Vim. It allows you to yank and delete things without worrying about losing the text that you yanked previously. It effectively turns your default register into a stack, and lets you cycle through the items in the stack after doing a paste. This plugin is intended to be a simpler alternative to the yankring plugin. It has a fairly complete test suite based on rspec and vimbot.

  • - redirecting all change and delete operations to the black hole register and introducing a new operator, 'cut' (by default this is mapped to the m key for 'move').




An area of Vim's memory used to hold text read from a file. In addition, an empty buffer with no associated file can be created to allow the entry of text.

  # display open buffers

:b [buffer number of any part of name]
  # switch to a buffer
set wildchar=<Tab> wildmenu wildmode=full
  with this, :b [tab] gives a menu
  close buffer

  • spinner.vim : fast buffer/file/tab/window switching plugin with only 3 keys.

  • - inspired by the Narrowing feature of Emacs and means to focus on a selected region while making the rest inaccessible. You simply select the region, call :NR and the selected part will open in a new split window while the rest of the buffer will be protected. Once you are finished, simply write the narrowed window (:w) and all the changes will be moved back to the original buffer.


Windows are like tmux panes, awesome clients, i3 windows, etc. Windows can hold file buffers or plugins like Nerdtree, which are browsable via searches, etc.

:sp [filename]
  open file in new split window
Ctrl-W w
  move forward window
Ctrl-W W
  move backwards window
Ctrl-W then h, j, k, l
  move window focus to left, below, above, right
Ctrl-W then H, J, K, L
  move window in the direction of left, below, above, right
Ctrl-W x
  switch windows around
Ctrl-W =
  balance window splits

Ctrl-W _
  maximize focused window horizontally
Ctrl-W |
  maximize focused window vertically
  quit all buffer windows on current tab

  • golden-ratio - Resize windows automatically using the Golden Ratio


map <silent> <C-J> <C-W>w
map <silent> <C-K> <C-W>W
map <silent> <C-,> :call DWM_Rotate(0)<CR>
map <silent> <C-.> :call DWM_Rotate(1)<CR>

map <silent> <C-N> :call DWM_New()<CR>
map <silent> <C-C> :call DWM_Close()<CR>
map <silent> <C-Space> :call DWM_Focus()<CR>
map <silent> <C-@> :call DWM_Focus()<CR>

map <silent> <C-H> :call DWM_GrowMaster()<CR>
map <silent> <C-L> :call DWM_ShrinkMaster()<CR>


:tab new
  create new tab

  close tab
  list existing tabs
  go to next tab
  go to previous tab
  go to tab in position i
:tab drop {file}
  open {file} in a new tab, or jump to a window/tab containing the file if there is one
:tab split
  copy the current window to a new tab of its own

:tabm [n]
  move tab to nth position
  move tab to last
:tab ball
  split all buffers into tabs
:tab help
  open a new help window in its own tab page
:bufdo qall
  send qall command to all tabs
  to check


:mks sessionsave.file
  save session

vim -S sessionsave.file
  load session from cli

  • - improves upon Vim's built-in :mksession command by enabling you to easily and (if you want) automatically persist and restore your Vim editing sessions. It works by generating a Vim script that restores your current settings and the arrangement of tab pages and/or split windows and the files they contain.

  • - Vim features a :mksession command to write a file containing the current state of Vim: window positions, open folds, stuff like that. For most of my existence, I found the interface way too awkward and manual to be useful, but I've recently discovered that the only thing standing between me and simple, no-hassle Vim sessions is a few tweaks: Instead of making me remember to capture the session immediately before exiting Vim, allow me to do it at any time, and automatically re-invoke :mksession immediately before exit. Also invoke :mksession whenever the layout changes (in particular, on BufEnter), so that even if Vim exits abnormally, I'm good to go. If I load an existing session, automatically keep it updated as above. If I try to create a new session on top of an existing session, don't refuse to overwrite it. Just do what I mean. If I pass in a directory rather than a file name, just create a Session.vim inside of it. Don't capture options and maps. Options are sometimes mutilated and maps just interfere with updating plugins.

  • - provides dynamically created headers or footers and uses configurable lists to show recently used or bookmarked files and persistent sessions. All of this can be accessed in a simple to use menu that even allows to open multiple entries at once.


  • Drawing Lambdas - "when I said I wanted to see lambdas in my code I didn’t mean inside of string literals, I meant actual lambdas as keywords."

Text objects


Folds are sections of text reduced to one line (based on brackets, indentation, etc.). Folding is on by default. I have the foldlevel dialed up to 20 to avoid them.

zo - open fold
zO - open fold recursively
zc - close fold
zC - close fold resursive
zR - open all folds
zM - close all
zj - go down and up a fold
zk - go up a fold

Text alignment


  • - all about "surroundings": parentheses, brackets, quotes, XML tags, and more. The plugin provides mappings to easily delete, change and add such surroundings in pairs.


  # autocomplete keyword forwards

  # autocomplete keyword backwards
  # completion mode
Ctrl-x Ctrl-f
  # filepath completion mode

  • - the abbreviation of "neo-completion with cache". It provides keyword completion system by maintaining a cache of keywords in the current buffer. neocomplcache could be customized easily and has a lot more features than the Vim's standard completion feature.

  • YouCompleteMe - a fast, as-you-type, fuzzy-search code completion engine for Vim. It has several completion engines: an identifier-based engine that works with every programming language, a semantic, Clang-based engine that provides native semantic code completion for C/C++/Objective-C/Objective-C++ (from now on referred to as "the C-family languages"), a Jedi-based completion engine for Python and an omnifunc-based completer that uses data from Vim's omnicomplete system to provide semantic completions for many other languages (Ruby, PHP etc.).[30]


  • - a plugin that takes care of the much needed management of tags files in Vim. It will (re)generate tag files as you work while staying completely out of your way. It will even do its best to keep those tag files out of your way too. It has no dependencies and just works.


  • vim-pad - A quick notetaking plugin for vim.

  • vimroom - Simulating a vaguely WriteRoom-like environment in Vim.

  • scratch.vim - Plugin to create and use a scratch Vim buffer

  • - different font colors for the paragraph in which the cursor is operating and the other paragraphs. Normally it works the way that the paragraph with the cursor (in which I am writing) maintains the normal font color while the other paragraphs turn into a grey that does not raise attention anymore.

  • - A Vim extension that emulates iA Writer environment when editing Markdown, reStructuredText or text files. It requires goyo.vim and it works by setting global Goyo callbacks that triggers special setup for Markdown, reStructuredText and text files.


:Gwrite - git add file
:Gread - git checkout (revert) open to staged version
:Gremove - git rm and close buffer
:Gmove - git mv file. with /, relative to git root; without, relative to file
:Gcommit - git commit, opens message buffer
:Gblame - open split window with git blame details
:Gbrowse - open Github, else git instaweb for local sevrer
  exit :Gdiff mode

vim#diff resolution:

:diffget [buffer] - get diff from another buffer
:diffput [buffer] - put diff into another buffer
:diffupdate - update diff colouring
dg - get from other buffer pane (only 2 pane)
dp - put to other buffer pane (works in 3 pane)
[c - jump to previous changeset
]c - jump to next changeset
:only - close buffers other than active

  • - shows a git diff in the 'gutter' (sign column). It shows whether each line has been added, modified, and where lines have been removed. breaks vim on script load on server side git repos for me.
  • - Sy sgitgutter.vim]hows all added, deleted and modified lines since the last commit via Vim its sign column. It supports several version control systems.

  • - a ‘gitk clone’ plugin for the text editor Vim. The goal is to give you a similar set of functionality as a repository viewer. Using this plugin you can view a repository’s history including branching and merging, you can see which commits refs point to. You can quickly and easily view what changed to which files and when. You can perform arbitrary diffs (using Vim’s excellent built in diff functionality) and you can easily check out whole commits and branches or just individual files if need be.

  • - When you type git commit, Vim starts and opens a commit buffer. This plugin improves the commit buffer. committia.vim splits the buffer into 3 windows; edit window, status window and diff window. You no longer need to repeat moving to another window, scrolling and backing to the former position in order to see a long commit diff.


  • - Asynchronous Lint Engine, is a plugin for providing linting in NeoVim and Vim 8 while you edit your text files.


  • - uses a variety of formatters for many filetypes. Currently, Neoformat will run a formatter using the current buffer data, and on success it will update the current buffer with the formatted text. On a formatter failure, Neoformat will try the next formatter defined for the filetype.



  • - a syntax checking plugin that runs files through external syntax checkers and displays any resulting errors to the user. This can be done on demand, or automatically as files are saved. If syntax errors are detected, the user is notified and is happy because they didn't have to compile their code or execute their script to find them. At the time of this writing, syntax checking plugins exist for applescript, c, coffee, cpp, css, cucumber, cuda, docbk, erlang, eruby, fortran, gentoo_metadata, go, haml, haskell, html, javascript, json, less, lua, matlab, perl, php, puppet, python, rst, ruby, sass/scss, sh, tcl, tex, vala, xhtml, xml, xslt, yaml, zpt


:so $VIMRUNTIME/syntax/hitest.vim
  # output all highlight groups




  toggle comments (for small comments)
  toggle comment for the current line
  comment region
  comment the current line



  • - HTML5 + inline SVG omnicomplete function, indent and syntax for Vim. Based on the default htmlcomplete.vim. Supports all new elements and attributes, SVG and MathML, microdata, RDFa, WAI-ARIA, Electron webview.

Creating and editing

  • xml.vim : helps editing xml (and [x]html, sgml, xslt) files




  • - Syntax highlighting and indenting for JSX. JSX is a JavaScript syntax transformer which translates inline XML document fragments into JavaScript objects. It was developed by Facebook alongside React



An up-to-date Vim syntax for PHP (7.x supported)

C / C++







  • vim tips and tricks: modelines - modelines allow you to set variables specific to a file. By default, the first and last five lines are read by vim for variable settings. For example, if you put the following in the last line of a C program, you would get a textwidth of 60 chars when editing that file:
/* vim: tw=60 ts=2: */

The modelines variable sets the number of lines (at the beginning and end of each file) vim checks for initializations.

Arrow keys


I chose /usr/share/config/vim

/usr/local/share/vim is a default $VIMRUNTIME though

If you're editing .vimrc, you can reload it with:

:so %

% stands for current file name (see :h current-file) and :so is short for :source, which reads the content of the specified file and treats it as Vim code. [31]

In general, to re-load the currently active .vimrc, use the following (see Daily Vim):



  • Vim Awesome - a directory of Vim plugins sourced from GitHub,, and user submissions. Plugin usage data is extracted from dotfiles repos on GitHub. [33]

Script management

  • NeoBundle is Vim plugin manager based on Vundle.
  • VAM - the short name for vim-addon-manager. You declare a set of plugins. VAM will fetch & activate them at startup or runtime depending on your needs. Activating means handling runtimepath and making sure all .vim file get sourced.
  • vim-plug - A single-file Vim plugin manager. Somewhere between Pathogen and Vundle, but with faster parallel installer. [34]

  • - simple Vim plugin/package manager. The ".vim" part of the name is a bit misleading, as it's really just a shell script. As the name hints, it relies on Vim's packages feature. At the time of writing, this is a relatively new feature that may not be available on your Vim. Use :echo has('packages') to find out. You can use pathogen to simulate this feature if your Vim is missing it.


  • - If you start Vim without giving any filenames to it (or pipe stuff to it so it reads from STDIN), startify will show a small but pretty start screen which shows recently used files (using viminfo) and sessions by default. Additionally, you can define bookmarks, thus entries for files that always should be available in the start screen. It also eases handling of loading and saving sessions by only working with a certain directory.



  • SmartusLine is Vim plugin that changes the color of the statusline of the focused window according with the current mode (normal/insert/replace)


  • Vmail is a Vim interface to Gmail.


To sort

  • - a note-taking script where searching for a note and creating one are the same operation. You search for a query, and if no note matches, it creates a new note with that query as the title.

  • ZoomWin - Zoom in/out of windows (toggle between one window and multi-window)

  • subvim - Vim customized to be like SublimeText



  • Conque is a Vim plugin which allows you to run interactive programs, such as bash on linux or powershell.exe on Windows, inside a Vim buffer. In other words it is a terminal emulator which uses a Vim buffer to display the program output.
:ConqueTerm zsh

:ConqueTermSplit <command>
:ConqueTermVSplit <command>
:ConqueTermTab <command>

  • browser-connect.vim - implements a VIM interface for browser-connect-server in order to provide a live coding environment similar to the one currently available in LightTable.


  • - Damian Conway's vmath plugin for vim as demonstrated at his OSCON 2013 "More Instantly Better Vim" presentation. Calculates the sum, average, min, and max for a visual region containing numbers.


  • spf13-vim - a distribution of vim plugins and resources for Vim, GVim and MacVim. It is a completely cross platform distribution that stays true to the feel of vim while providing modern features like a plugin management system, autocomplete, tags and tons more.

  • SpaceVim - a community-driven Vim distribution with layer feature. SpaceVim manages collections of plugins in layers. Layers make it easy for you, the user, to enable a new language or feature by grouping all the related plugins together. It got inspired by spacemacs. [38]



  • Vivify - A ColorScheme Editor for Vim



  • - lets you control Vim with your voice using speech recognition. For instance, you can say “select three words” to type v3w or “change surrounding brackets to parens” to type cs]) or crazy things like “change occurrences of ‘foo’ into ‘bar’, globally, ignore case, confirm” to type :%s/foo/bar/gic. Of course in insert mode you may dictate whatever you like. To learn the grammar, have a look at the unit tests and the code (“use the source, Luke”). It’s quite declarative and easy to follow.

  • - a plugin for connecting vim to espeak. It overrides the default behavior of the s and S keybindings. The former, when combined with a motion, will read the implicated text aloud - for example, s} will read the next paragraph, sw will read the next word, and ss will read the current line.

Tmux integration


  • netrw.vim : Network oriented reading, writing, and browsing

  • - plugin to help editing pages of a MediaWiki site from vim/neovim. It provides: filetype detection; improved syntax highlighting; page preview; semantic auto-completion of links and templates with a coc.nvim source; UltiSnips snippets; <plug> mappings for text objects; matching pairs for matchit.vim; integration with vim-surround





:e scp://
  open remote file
$ vim scp://
  in normal mode, run man for current word (opens "man word" in shell)

  • - provides dynamically created headers or footers and uses configurable lists to show recently used or bookmarked files and persistent sessions. All of this can be accessed in a simple to use menu that even allows to open multiple entries at once. Startify doesn't get in your way and works out-of-the-box, but provides many options for fine-grained customization.

  • - a plugin which allows one to draw lines left, right, up, down, and along both slants. Optionally one may "cap" the lines with arrowheads. One may change the horizontal, vertical, slant, and crossing characters to whichever characters one wishes.

Vim everywhere

  • Big Pile of Vim-like - Items of this type are applications that are intentionally created to be Vim-like in some respect (possibly disabled by default). [39]


File management

Other integration

  • - Athame patches your shell to add full Vim support by routing your keystrokes through an actual Vim process. Athame can currently be used to patch readline (used by bash, gdb, python, etc) and/or zsh (which doesn't use readline). Don't most shells already come with a vi-mode? Yes, and if you're fine with basic vi imitations designed by a bunch of Emacs users, feel free to use them. ...but for the true Vim fanatics who sacrifice goats to the modal gods, Athame gives you the full power of Vim. [40]

  • - Vimbed is a Vim plugin for embedding Vim in other programs. Run Vim in the background using Vimbed to ease communication with external processes.

Browser navigation

  • - Vim Vixen is a Firefox add-on which allows you to navigate with keyboard on the browser. Firefox started to support WebExtensions API and will stop supporting add-ons using legacy APIs from version 57. For this reason, many legacy add-ons do not work on Firefox 57. Vim Vixen is a new choice for Vim users since Vim Vixen uses the WebExtensions API.

Browser textarea

  • wasavi - an extension for Chrome, Opera and Firefox. wasavi transforms TEXTAREA element of any page into a VI editor, so you can edit the text in VI. wasavi supports almost all VI commands and some ex commands. wasavi is under development. Any bug report or feature request is welcome.
  • GhostText 👻 - Use your text editor to write in your browser. Everything you type in the editor will be instantly updated in the browser (and vice versa).




Live editing

  • - Browserlink is very simple. The plugin itself hooks autocommands for file changes (and other things) to the provided functions. The functions connect through HTTP to a node.js backend, which your webpage connects also to. The entire process happens extremely fast.



  • Vem Text Editor - an alternative command layout for the Vim text editor. It provides full keyboard control over the editor while trying to be as simple and intuitive as possible. [44]