Thursday, December 29, 2005 
« 25 Dumbest Political Quotes of 2005 | Main | Curing Hiccups »

vi. Vee-eye. My text editor of choice for 20 years. Half my life.

Why? Because I imprinted on vi, like a duckling on its mother. Vi's keystrokes are bound into my muscle memory. My fingers reflexively use vi keystrokes to move around, to delete text, to move blocks, to find patterns. I don't have to think about using dw to delete a word, or n to find the next match of a pattern, or yG to yank the rest of a file, or j to move down a line, or . to repeat the last modification. My subconcious does it for me.

I don't even have to think much about more complex commands, like ct) to replace a parameter list, or simpler regexp replacements. I've internalized so many vi idioms in the last two decades.

For nearly all editing tasks, I'm far more productive when I use vi. Like Tom Christiansen, I can become at one with the machine.

People who've used vi fall into a bimodal distribution. They love it or they hate it. Usually, it's because of vi's modal nature. I love the orthogonality of the UI.

20 years

In the autumn of 1985, I entered my third year of Computer Science at Trinity. We were promoted from three hours a day on the 1200-baud terminals in the basement to all-day usage of the 9600-baud terminals in the main terminal room. We also graduated from the wretched SOS line editor to vi running on Eunice (a Unix emulator for VAX/VMS). I don't think I took to it instantly; it took a little while for it to grow on me. Soon enough, though, I was hooked on regexps.

Hitting ESC quickly became a habit: one that causes me occasional grief, when I reflexively hit ESC after entering text in an edit field in some app or other, and destroy what I've just written.

Two years later, I got my first fulltime job, writing a full-screen text editor for a small Irish typesetting company, ICPC. It was a replacement for the in-house line-based editor used by the data entry keyboaders, which I wrote in Vax Pascal. A friend made me aware of VITPU, a Vi emulator written in VMS's TPU, which I gladly latched onto.

Two years after that, I entered the Master's program at Brown, where I first got to use Unix and X Windows. Naturally, I used vi, but it was a lot less powerful than GNU Emacs, which was very popular. In time, I learned of VIP, a vi emulator for Emacs. I began using VIP and quickly forsook standard vi. I liked having the power and customizability of Emacs, though I never learned to like the Emacs keybindings. (François Pinard, a longtime Emacs user, writes eloquently of why he moved to Vim.)

I stayed with VIP for years, as it evolved into Viper. I show up in the Viper credits for occasional contributions.

In 1992, I moved to Seattle and worked for Microsoft for the first time. I kept my Emacs+Viper habit.

By 1995, I was working for MicroCrafts and had discovered Vim. Version 3.x ran on DOS as a 16-bit command-line app. I used it occasionally on NT. Then I discovered that Roger Knobbe had ported Vim to NT, but that it was pretty buggy. I fixed the bugs and submitted my fixes to Bram Moolenaar, Vim's author.

One thing led to another, and I became the Win32 guy for Vim 4.x. Console-mode Vim became rock solid on NT 4, but I never got it to the same level on Win95, due to inherent problems in the console APIs on Win9x. I also put together a proof-of-concept implementation of gvim 5.0 for Windows. At that point, I gave up active involvement in the development of Vim: I had moved back to Microsoft, I was starting to date Emma, and I was working on the Beginning ATL COM Programming book. Something had to give.

I continued using Viper for much of the time that I was developing Vim, because Vim was not then rich enough for my needs. After Vim got a scripting language (VimL) and syntax highlighting in version 5, I started using Vim more and more. I think it's been five years since I last used Emacs, and I never got beyond GNU Emacs 19.34.

Recently, I've stopped using Vim as my exclusive programming editor, and I've been alternating between Vim and Visual Studio plus Resharper, as I've started doing a lot of .NET development. But more on that some other time. This post is already too long.