20 Years of Vi
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 vi 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.
Vim
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.