VIM is the Worst Text Editor Ever! (sometimes)

By Chris Rittersdorf on 05 05 2011

Weighing the merits of different text editors has sparked nerd holy wars since the beginning of the Unix epoch. One of the defining characteristics of a text editor is how productive it makes a programmer. I say that different editors make developers more productive in different situations.




Like most developers, I have strong opinions about certain technologies. I love VIM! You can't even begin to imagine how much I love this editor. For the longest time I've held this editor in such high regard that I would shun and look down upon those simpletons who needed a mouse  to be able to edit their code.

My experiences have taught me that having this attitude puts stress on my relationships with colleagues. I have grown to realize that some people don't appreciate my favorite obtuse text editor the way that I do. So what's a developer to do so as to not be ostracized by his associates? I've learned to love many editors.

Being Sociable

Pair programming is a necessity. It helps us grow as developers. We learn new things from other developers that we might not have developing in isolation. It helps us to become better communicators about the technologies we work with. If you don't pair program, give it a try. You might like it, and you might make a friend or two.

When I pair program I like to use a general editor like TextMate. It has powerful features like code snippets, but it's still egalitarian enough that an individual that's new to it can be productive with little ramp up time. Since it's more general, I find that TextMate slows me down a little bit. I can't transform code paragraphs in a few keystrokes like with VIM. Instead much of my editing is one character at a time, and sometimes I have to take my hand off the keyboard to use the mouse.

Some (VIM enthusiasts) might see this slowdown as a hindrance. But I see this as a check and balance. The whole point of pair programming is to be able to express your idea to another individual so that they can re-affirm your ideas and guide you if you get off track. With an editor like TextMate your ideas get typed at a pace which an observing individual can comprehend. This isn't always the case with more niche editors like VIM or Emacs which can remove or add large portions of text in just a few keystrokes.

Using a niche editor like VIM or Emacs is fine for pairing ONLY if both parties are well acquainted with the editor. Forcing your pair to use an editor that they're unfamiliar takes brainpower away from the code and puts it toward learning a new editor. Forcing an editor on another person is just cruel, and it makes you look like a jerk. So don't do it. Also, there's a tendency to heavily customize VIM and Emacs configurations. If you expect to efficiently pair program with one of these editors, make sure your customizations don't obscure any base functionality of the editor.

The Lone Wolf

When I'm flying solo, I always edit with VIM. I can churn out code faster with VIM than any other tool I use. Programmers who use niche editors like VIM and Emacs pride themselves on their years long search of the efficiency Holy Grail. And because of this, I keep using it.

As developers, we should always be on the lookout for ways to solve technical problems and annoyances programmatically. Both VIM and Emacs provide scripting facilities that allows us to do just this. For the longest time, I didn't want to learn VIMScript. It doesn't look like any other programming language I've seen. But when I finally broke down and tried learning it, I was exposed to the base functionality of the editor, and learned many tricks that have become part of my day to day editing toolbox.

I tend to shy away from TextMate when I am working by myself. The slow-downs that the non-modal editing introduces don't provide the same benefits as when I'm in a pairing situation. This is my time to experiment. I can learn new VIM techniques, I can build macros to make repetitive editing easier. Essentially, I can take some of the time I gain from being efficient to learn my editor, and study whatever technology I'm working with in a more detailed manner.

Different editors are more effective in different situations. When you're trying to be social, a more general editor does the best job. They are better at communicating to others what your intent for code is. When you are working alone, a more niche editor works well. They contain powerful tools for being an efficient developer. But also, they are in essence programming languages in themselves. By mastering both kinds of editors, you become a more well-rounded developer.