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.