Vim is a powerful, portable, keyboard based text editor. Being text-based, vim is lightning fast, with an incredible set of features developed over its multi decade existence.
Pro Enables effective keyboard-driven editing due to its modal nature
Interaction with Vim is centered around several modes. Each mode has a different purpose and switching between them changes behaviour and keybindings. There are 12 modes in total (6 basic modes and 6 variations on basic modes) and 4 of them are used commonly.
Insert mode is for entering text. This mode most resembles traditional text entry in most editors.
Normal mode (the default) is entered by hitting ESC and converts all keybindings to center around movement within the file, search, pane selection, etc.
Command mode is entered by hitting ":" in Normal mode and allows you to execute vim commands and scripts similar in fashion to a shell.
Visual mode is for selecting lines, blocks, and characters of code.
Modes allow separating concerns between various tasks and reusing keys for different kinds of functionality. As a result, the workflow becomes more efficient.
Pro Ubiquity and portability
Vi/vim exists on almost all Unix-like platforms, it is the de-facto Unix editor, and is easily installed on Windows. All you need to make it work is a text-based connection, so it works well for remote machines with slow connections, or when you're too lazy to set up a VNC/Remote Desktop connection.
Pro Everything is a mnemonic
Vim associates keys with words. For example,
d is for "delete",
w for "word". To perform an action you string together letters. Thus, to delete a word, press
This way it's possible to abstract a large amount of functionality that Vim provides in an intuitive way.
Pro Amazing extensibility
Vim uses a custom scripting language called VimL (or vimscript). It provides a rich scripting functionality to build upon the core of vim.
When combined with, for example, a plugin management system, it becomes easy to add support for syntax, debugging, build systems, git, and more.
Vim has thousands of plugins made by the community covering a wide range of languages, integrations and productivity enhancements.
Moreover, vim and neovim provide api with various popular programming language. This broadend its extensibility even further.
Pro Macros are highly predictable
Macros are sequences of instructions usually used to simplify common, repetitive tasks and increase productivity. Many text editors have programmable macros, but since vim is keyboard based, its programmed macros are usually far more predictable and easier to understand.
Pro Amazing productivity features
Vim's support of :s and :g commands helps users make complex changes to large files in seconds instead of hours.
Vim's keyset is mainly restricted to the alphanumeric keys and the escape key. This is an enduring relic of its teletype heritage, but has the effect of making most of Vim's functionality accessible without frequent awkward finger reaches.
Pro Lightweight and fast
When compared to modern graphical editors like Atom and Brackets (which have underlying HTML5 engines, browsers, Node, etc.), Vim uses a sliver of the system's memory and it loads instantly, all the while delivering the same features. Vim is also faster than Emacs.
Pro Extremely portable
Vi/vim exists on almost all Unix-like platforms. It's the de-facto Unix editor and is easily installed on Windows. All you need to make it work is a text-based connection, so it works well for remote machines with slow connections, or when you're too lazy to set up a VNC/Remote Desktop connection.
Con Poor package management out of the box
Out of the box package management in vim is (to put it lightly) bad. With the user being forced to download files and spread them out in folders inside their
.vim folder. But this can be easily fixed through the use of third-party package managers such as Vundle or Pathogen.
Update: Vim 8.0 has package management
Con Consume brain energy for editing that should be used for logic
Text editing in vim is awesome, but it requires thinking about combination of commands. In other editors, you don't have to think about how to delete this part of code. You just think about how to implement a feature, what is a good design for this code. Even after you get used to using vim, it still requires your brain for editing.
Con Difficult to write extensions for
Vim uses a custom scripting language, VimL, that is somewhat difficult to read and write. As part of data analysis on GitHub commit messages, vimL was found to have the highest percentage of commit messages with expressions of Anger. Almost double of that of the language that had the second highest precentage of expressions of Anger.