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.
Ranked in these QuestionsQuestion Ranking
Pro Extremely portable
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 Keyboard-based, mouse-free interface, support trackpad
There's no need to reach for the mouse or the ctrl/alt buttons again. Everything is 1 or 2 key presses away with almost 200 functions specifically for text editing. Vim does support the mouse, but it's designed so you don't have to for more efficient usage.
Versions of vim like gVim or MacVim still allow you to use the mouse and familiar platform shortcuts. That can help ease the learning curve and you'll probably find you won't want to, or need to, use the mouse after a while.
Pro Works in terminal over SSH
Unlike other editors such as Sublime Text, Vim is a command line editor and hence can be used in remote development environments such as Chromebooks via SSH.
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, loads instantly, and delivers the same features.
Vim Is faster than emacs.
Vim is open-source GPL-compatible charityware.
Pro Tons of plugins/addons
That can make vim the definitive resource for every environment, Ruby/Rails, Python, C. Or even just have more info in your view.
Pro Everything is a mnemonic
No need to memorize different key combinations for things like deleting the text inside of a block or deleting the text inside of a pair of quotes. It's just a series of actions, or nouns and verbs, or however you prefer to think about it. You want to delete, so you select "d", you want it to happen inside something, so "i", and you want the surrounding double-quotes, so just ". But if you were changing the text, or copying it, or anything else, you'd still use the same "i" and ". This makes it very easy to remember a large number number of different extremely useful commands, without the effort it takes to remember all of the Emacs "magic incantations", for example.
Pro Macros increase productivity
Many text editors have programmable macros, but since vim is keyboard based, your programmed macros are usually far more predictable and easier to understand.
Pro Great productivity
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 Once learned, it's very hard to forget it
Its somewhat steep learning curve is more than made up for once you've mastered a few basic concepts and learned the few tricks that will allow you to program faster with fewer cut/paste mistakes.
Pro Excellent performance
Because it loads the whole file into RAM, replacing all string occurences in 100MB+ files is quick and easy. Every other editor sort of died during that. It is extremely fast even for cold start. Vim is light-weighted and very compact. In terminal, it uses only small amount of memory. Anytime you invoke vim, it's extremely fast. It is immediate, you can't even notice any time lag.
Pro Usable from a Terminal or with a GUI (GVim, MacVim)
If you happen to be logged into SSH, you can use Vim in a terminal, otherwise it can run with a GUI too.
Pro Has multiple distinct editing modes
Interaction with Vim is centered around several "modes", where purpose and keybindings differ in each.
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.
Those are the major modes, and several more exist depending on what one defines as a "mode" in vim.
Vimtutor is an excellent interactive tutorial for people with no prior experience in Vim. It takes about 30 minutes to complete.
Pro Productivity enhancing modal paradigm
As with all vi-like editors, Vim provides a modal paradigm for text editing and processing that provides a rich syntax and semantic model for composing succinct, powerful commands. While this requires some initial investment in learning how it works to take full advantage of its capabilities, it rewards the user well in the long run. This modal interface paradigm also lends itself surprisingly well to many other types of applications that can be controlled by vi-like keybindings, such as browsers, image viewers, media players, network clients (for email and other communication media), and window managers. Even shells (including zsh, tcsh, mksh, and bash, among others) come with vi-like keybinding features that can greatly enhance user comfort and efficiency when the user is familiar with the vi modal editing paradigm.
Pro Can never outgrow it
The fact that very few, if any, people claim to be a "Vim Master" is testament to the breadth and depth of Vim. There is always something new to learn - a new, perhaps more efficient, way to use it. This prevents Vim from ever feeling stale. It's always fresh.
Pro Built-in package management
Starting with Vim 8, a package manager has been built-into Vim. The package manager helps keep track of installed plugins, their versions and also loads only the needed plugins on startup depending on the filetype.
Pro Asynchronous I/O support
Since Vim8, Vim can exchange characters with background processes asynchronously. This avoids the problem of the text editor getting stuck when a plugin that had to communicate with a server was running. Now plugins can send and receive data from external scripts without forcing Vim to freeze.
Pro Flexible featureset
Vim allows users to include many features found in IDEs and competing editors, but does not force them all on the user. This not only helps keep it lighter weight than a lot of other options, but also helps ensure that some features a particular user will never use will not get in the way.
Con Difficult learning curve
You'll spend a lot of time learning all the commands and modes supported. You'll then spend more time tuning settings to your needs. Although once it's tuned to your needs, you can take your
.vimrc to any machine you need and have the same experience across all your computers.
Con Poor support for external tooling
Many plugins depend on optional Python and Lua features which may or may not be included in whatever binaries are available for your system, and without platform-specific hacks, it is difficult for plugins to operate in the background or use external tooling.
Con Lacks many modern programming features out of the box
Syntax checking, autocompletion, file management, plugin/update management, etc all require plugins and extensive configuration to get working.
Not to mention you'll probably have to compile native binaries yourself and ensure your system has the proper development libs to do so.
Con Doesn't play nice with the system cut/paste mechanisms
This can be worked around if you disable mouse for insert mode. You can then right-click your terminal and use paste like you would anywhere else in a terminal.
Con Slow when opening files with very long lines
A lot of very very long lines can make vim take up to a minute, where a few other editors take only seconds to load the same file.
Con Foreign keyboards have a hard time on vim out of the box
A lot of frequently used keybinds are way harder to access on foreign keyboards, because they use different layouts.
For example, germans use the QWERTZ layout and, french use the AZERTY.
Con Works poorly out of the box with right-to-left
Con Unintuitive mode switching
Con No smooth scrolling
Even with the GUI version the lines jiggle line by line. If you are used to smooth scrolling it is very annoying, especially when working with larger files.