Man, I agree with the notion of power, but I simply cannot see how anyone could call it simple. The array of keystrokes and their combined meanings is not anywhere near simple, in my opinion.
That said, I would really like to sit down and learn vi sometime.
about the longest 'combos' you make are action-move combos, which is 2 keys, and both the actions and move keys do things by themselves. 'w' for example moves to the beginning of the next word. it's a common travel key. 'dd' deletes the current line and is also commonly used. combine them into 'dw' and you delete everything up to the front of next word
so you preface any motion command with an action and you get the intended effect. it's a lot more intuitive than it may look at first. a combo i use a lot is 'cw', which replaces the current word. but when programming this is equivalent to "replace variable." it's things like that (see the 'smart ranges' topic on that link) that make it feel like you're more directly connected with the code, rather than editing it through an interface
As I say, I do love the power of it and I'm sure I'd find it somewhat intuitive once I start using it, but it's just a steep learning curve when you can't fall back to input with a mouse.
What I mean is: whenever I start learning a new program, I like to be able to use it like a n00b at first (i.e. click around, use native controls), and then learn the more powerful features.
A good example of this way of learning is the way I use TextMate... every day I learn new controls, and get more proficient and more effective, but I'm not rendered useless (as one would be with vi) if I don't know each and every key combination.
Granted, you can make do with just a few vi commands and be not effective at all, but it's not the same as using a GUI
i've found the Cold Turkey method of learning very useful. there's a saying that goes something like, "the greatest catalyst for progress is necessity." when switching to dvorak i simply never touched quwerty again. likewise with Vim, i never used another editor. it's a bit odd at first, but if you keep yourself from using anything else, you will have to learn, or, as you say, you really will be useless. and due to that, you learn it faster than approaching it from a more reserved angle
is it worth it? absolutely. editing code is a fundamental part of programming. it's something you're going to be doing a lot of. the investments you put into that aspect will pay off greatly
the key to learning vi well is to be in command mode as much as possible
Interesting perspective, I'm wondering if you're a "Gen Y'er" (or whatever they're calling that newfangled generation these days ;)
I ask because I started with PCs before the mouse was really commercialized. My first programs were on Commodore PETs and C64 and my PCjr. (Although I did later buy a mouse for the PCjr, I think it cost close to $200 at Babbages, had to save money for a while for that one...)
My long-winded point being that I "grew up" with a CLI. We edited our text files with edlin (and we liked it, dammit!!). Maybe the folks who didn't get started viewing the mouse as a primary interaction device feel more comfortable with vi, and never really missed the mouse interface.
I'm wondering if you're a "Gen Y'er" (or whatever they're calling that newfangled generation these days ;)
Apparently the defining starting birth year for that generation is 1982. I happen to have been born that year, and my preferred term for the generation is "Millennials". "Gen Y" over-emphasizes our interaction with the "slacker generation" which preceded us.
Anyway, I don't think that there's much correlation between birth year and vi. With the rise to prominence of Linux and other Unix systems many many budding hackers are starting out with full-fledged command lines and honest-to-goodness Unix. And that's a beautiful thing.
Register-based yanks are longer, eg. to cut a block of code into the global clipboard so it can be pasted into another app, it's "+d}.
I find myself using `cw`, `c%`, `ct,` (change everything up till the next comma), and `ct ` (change everything up till the next space) a whole lot too. The . command (mentioned in the article) is wonderful.
Also, I love vim's macro support. For example, I usually define a macro that converts 'var' statements on separate lines into a single statement broken into multiple lines. (MTASC won't let you refer to previous vars defined in the same statement, so if I change the data dependencies, I usually have to change the formatting.) The entirety of the macro is `qa^dw>>[UP]$s,[ESC][DOWN][DOWN]q`. That's `qa` to start recording a macro into register `a`, ^ to move to the first non-blank character, dw to delete a word ('var ', in this case), >> to shift the line left by 4 spaces, UP moves up a line, $ goes to end of line, `s,` substitutes a , for the ; at the end of line, ESC gets back into command mode, the two DOWNs put me on the line below where I started, and q stops recording. Then if I want to replace 5 lines of variable declarations, I can do 5@a (invoke macro a 5 times), and since each macro ends exactly one line lower than it started, it'll do the whole block for me at once.
My longest day-to-day combo is "vabx" or "vaby". Basically, for lisp code, it selects the entire s-expression including the parens, and either removes it or deletes it.
That said, I would really like to sit down and learn vi sometime.