As someone who spends considerable time in front of a computer screen (or two), I knew that there were two groups of people, supporting two text editing systems – Vi/Vim and Emacs. The relations between these two is like the relation between Windows and Linux – both are considered superior by their supporters. I knew that both are supposed to take text editing, particularly for coders, to the next level in speed and possibilities, and that both are supposedly harder to learn, because most people are used to “classic” style of working with text using arrows and ctrl-arrows, shift for selecting, home/end, etc.

I also knew that this style of text editing is very limited – getting the cursor to the right place on a page full of text takes numerous arrow- and ctrl-arrow key presses, or requires you to grab the mouse. For a large group of computer users, this is no problem. However, if you’re using your computer for programming, and are interested in seriously boosting your productivity (not to mention other advantages, like being able to switch between platforms), everyone who’s made the jump will tell you that it’s worth it.

It took some time to become frustrated with the slowness of usual text editing. After I did, I started looking for a solution, but I didn’t yet consider actually joining one of these two opposing sides – I thought it’d be way too difficult. So I began trying various text editors, who supposedly had advanced features. It helped, for a while. For example, macros are a very useful thing, and I can’t imagine my life without them. However, the text editing itself often didn’t change, and if it had some new shortcuts, they were only usable in that particular program.

So finally I decided to sacrifice a month or two to learn one of those two “oldschool” programs. I knew that vim has two modes of editing – the normal mode, in which you can’t type anything, and you basically only move the cursor, and the insert mode, in which you can type, but cursor movement is limited. It seemed interesting, and I thought it could be effective if you knew your way around, but it seemed like a hassle, particularly in combination with all those strange (:wq) shortcuts. So I printed out some Emacs cheatsheets, installed an Emacs editor, and… nothing happened. I tried several flavors of Emacs, but the programs themselves seemed to require more effort to set up then I was willing to give, so I didn’t even get to actually using them for, you know, typing something. For 99% of time I kept using the good old PSPad.

Then, one day, I was bored, and it occured to me that I could explore the vim world for a while. So I used del.icio.us to find some worthy links, and bingo. Before I could even try out gvim and fail miserably just as I did with Emacs, I encountered Cream, which is a gvim modification. I installed it and opened a Python source file. I pressed j, which is supposed to be like the down arrow, and it actually typed “j” into the source code. Well, I wondered, where’s the vim style? The program behaved like a classic text editor, with usual shortcut keys.

I fumbled around the menus for a while and finally turned on Expert mode, printed our cheatsheets for VIM, opened some tutorials, and started learning. And guess what – the basics weren’t so difficult after all, particularly because I could already see how brutally effective this way of text editing can be. Moreover, with Cream it is possible to use the “normal” way of editing text as well as the vim modes. And it can also be used with GVim portable, so you can carry it around on a flashdisc.

I guess vim and Emacs both have their strengths and weaknesses, and it was probably just luck that I fell in love with vim, but I did and now I can’t stop. It feels like fun and adventure – really. There’s probably a way to do anything, and it’s fun in actually finding out how, followed with gratification when you finally do.

When I look at some videos, I know I’m still a total newbie, watching in awe how the cursor jumps around – it’s unbelievably fascinating to see the speed. It just doesn’t feel like you’re using a tool to do the typing – there is no layer between you and the code, it’s just flow. It’s like magic. And yes, it’s perfectly worth the time.

By the way, there are several very nice color schemes in Cream.

Some tutorial and tips:
vim tutorial
lots of key combinations and tips
vim keys
100 vim commands every programmer should know

and probably the best explanation of why Vim is so interesting – Coming Home To Vim

UPDATE: After a short while, I abandoned Cream, and started using just Vim. Again, it was worth it, Cream started to get in the way pretty quickly.