Every so often I wonder if I’m making trouble for myself by doing all of my typing in vim. Writing for this blog, writing engineering plans and design documents, and writing code. There are tools that are made especially for doing these jobs, and vim certainly doesn’t have any facility for making diagrams.

All vim can really do is edit a bunch of bytes, trying to represent them as formatted text. It doesn’t even really understand code, which is what most people use it for.

But still, after I take a little trip over to VSCode or Jetbrains or Nova or Scrivener, I end up coming back to vim, finding a vim plugin that scratches my itch, and getting right back to it. Here’s what keeps me here, using this old, weird, but great tool.


Opening a file in vim is fast. Jumping from place-to-place in vim is fast. Typing in vim is fast. Fast is a feature


Every good idea has ways to split windows, but in vim it’s stupid fast, and stupid easy to manipulate. Here’s magic spell for splitting the window vertically, then the left one horizontally, then navigating to the right-hand one.

^+W k

You end up with:

| foo   | baz_ |
|       |      |
| ----- |      |
| bar   |      |
|       |      |
|       |      |


Have you ever been on a Linux box without at least vi? Even Arch and Alpine ship with vi installed.


With the advent of the Language Server Protocol, many language-specific features like navigation, highlighting, and completion have been decoupled from editors. Commander-of-Completion is a great vim plugin that adds LSP support to vim and makes it less arduous to add various new languages to your toolkit.


Modal interfaces like vim’s are generally regarded poorly in the UX community. The other pre-modern text editor, emacs, avoids modes but relies heavily on modifiers to enable non-typing modes.


I never touch my mouse using vim. In many cases, you simply can’t use the mouse to get anything done. This takes some getting used to, but it’s a blessing for your wrists and shoulders.