There is a computer program called Vim, based on software created in the 1970s. It is famously difficult. Computer programmers have endless jokes about how much of a challenge it is just to exit the program. It is also ubiquitous. If you are on Mac or Linux, it is already installed on your computer, whether you know it or not. And it has a cult following of devoted evangelists who will talk your ear off about why it’s the best thing ever, sorta like In-n-Out Burger.
I am one of these cultists, and yes, I’m about to evangelize. Though not really about Vim specifically, but about difficult tech tools in general.
These days, the gold standard for tech is whether or not it’s “easy to use.” According to that way of thinking, the best kind of program is one that requires no manual, no explanation, no tutorials, and where the number of buttons you have to press is either zero or one. So easy a five-year-old could do it.
That is an nice ideal. But simplicity comes at a cost, and five-year-olds are not very smart. A simple tool is, by definition, inflexible. Software that boils everything down to one button needs to make a lot of assumptions about what the user is trying to do. If you don’t agree with those assumptions, too bad.
One obvious example is the difference between a smartphone and a laptop. In some smartphone apps, like WhatsApp, long-pressing on a link automatically copies that link. That is an assumption: WhatsApp developers are thinking, if someone is long-pressing a link, they probably want to copy it. Maybe not, you presumptive assholes! There are plenty of other things I might want to do with it. I could be trying to select just part of the link, or share the link with an app that will save it to my reading list. All of that is easy enough on a laptop. On a phone, you’re out of luck.
The problem with easy-to-use design, then, arises when there’s a discrepancy between what the developers expect us to want, and what we actually want. Like, yo, I put my finger on that text to share it; why are you copying? Or when Microsoft Word seems to arbitrarily indent things and there is no way to stop it from doing so. This is much more likely to happen when software makes decisions for us or is, in programmer-speak, “too opinionated.”
That’s why there’s an advantage to difficult tools. Instead of spending time finding the easiest tool, we should look for the most powerful one—and make it do exactly what we want.
The world’s most difficult text editor
First, what is Vim? And why is it so difficult?
Well, it is a text editor. That might be a bit of a surprise. Editing text is not the kind of thing that seems like it would involve a highly difficult program. You type a letter on the keyboard, it appears on the screen. Done. Easy.
Except that’s not how Vim works at all. Typing letters in Vim does not normally result in those letters appearing on the screen. Whaaaat?
Yes, that’s correct, because Vim is what’s called a “modal editor.” This means, quite simply, that it has multiple “modes.” Its “insert mode” will be familiar to you: type something, and it shows up on screen. But most of the magic happens in “normal mode,” where Vim users spend most of our time. Normal mode turns every key on the keyboard into a set of commands that are specially designed for manipulating text.
These commands have a simple but powerful grammar. There are verbs, nouns, and modifiers. The key of
d represents the verb “delete.” And
w represents the noun “word.” So if you type
w, you will “delete a word.” You can modify that with a modifier. Like a number. Type
w and Vim will delete the next 5 words. If you messed something up, type
u to execute the verb “undo.” And hit
i to get to insert mode and do the normal typing thing. Another verb is
y for “yank” (basically “copy”)–so
w to copy one word. That is just a taste.
Here’s what that looks like. (The keystrokes showing up here are not part of Vim, it’s just to demonstrate what exactly is happening.)
Utilizing this grammar allows for endless combinations of commands to perform actions that can be both highly complex and specific to a given task. It is this kind of thing that perplexes and amazes non-Vim users. With just a few keystrokes, you can move a couple sentences from one paragraph to another, delete everything up to the next comma, restart the terrible sentence you just wrote, swap the positions of two words, combine paragraphs, and plenty more—all instantly, and all without touching the mouse.
The upside of difficult tools
For me, Vim was a game-changer. Once I got the muscle memory down, I felt like I had spent the rest of my life typing on training wheels. Or like I had been playing piano one note at a time, not realizing that I could make chords by playing multiple keys at once. Or like, after being trapped in a cave looking at shadows that I assumed were the full extent of reality, I escaped from said cave, discovering the true nature of the shadows.
Okay, maybe not quite. But you get the picture. Basically, Vim allows me to more efficiently and effectively express myself through text, whether I’m writing code or prose.
One of the interesting things about Vim is how old it is. It was one of the first text editors designed for screens. It also predates the widespread use of the computer mouse, which is why it’s best used without one. Because it comes from this bygone era of software development—when programmers had to develop complicated solutions for computers with limited power and flexibility—Vim is hard.
That something as seemingly simple as editing text can be made so complicated is anathema to the way we think about technology today. Because Vim doesn’t care about making things easy, and leaves most decisions up to the user, its creators were able to think about how to design the best tool for the job. In this case, those designers recognized that writing on a computer is more about editing existing text than adding new characters. For that reason, it puts “normal mode” first, which specializes in chopping, moving, and manipulating text. They couldn’t do that unless they could expect the user to be willing to get past the fact that hitting the
d key does not result in a “d” appearing on the screen.
Form your own opinions
Vim’s modal editing is a skill for adults. The kind that is not easy, but pays off in the long run. Like learning how to cook or fix things around the house or say no to an invitation before the event happens. Of course, just because something is difficult does not mean it is worth learning. Some programs are difficult and also terrible. But the lesson I’ve taken from Vim is that “easy to use” is primarily a way to dumb myself down.
The new cult of simple software is making us less productive. Simple tools get in the way of our thinking by making assumptions about what we want to do, and by putting the ease of getting going ahead of optimizing productivity. By contrast, using a tool like Vim makes me more expressive. It reduces the friction between what’s in my head and what I can make happen on the computer. I can more easily and quickly try out several variations of what I’m writing. It is also incredibly flexible. If I don’t like the way Vim does something, I can change or add features using packages other people have created, or spend a bit of time learning how to make my own. That’s not as hard as it seems: Just watch this talk by Jay Dixit, a science writer with no programming experience, who customized Vim’s excellent rival, Emacs, to adhere to his personal writing workflow and style.
It is time to embrace the difficult tool. No more accepting Excel when learning R or Python would let us do better work; no more out-of-the-box flashcards instead of customized software like Anki. Let’s stop expecting software to do everything for us, and put our minds to work.