Code & Sundry

Jon G Stødle

Thoughts on Vim Bindings

393 words, 2 minutes to read

It started with a colleague of mine mentioning that he'd started using Vim bindings in his non-Vim editor, and he quite preferred it. I thought I'd give it a try, and haven't looked back. I find it empowering being able to do quite complex things with a few keystrokes.

But in that fact also lies one of the contradictions with Vim (binding) users. Hardcore fans/users will tell you about all the time saving benefits, the productivity boost and other things that make Vim the superior editor to use. The problem is that optimizing the way you write code is a micro optimization. You probably spend around a tenth of your time actually writing. Most of the time you're reading code, thinking about code and discussing code, not writing it. Optimizing your typing speed is optimizing something that's not consuming a lot of your time.

I personally don't use Vim, but I do use plugins for my editors to enable Vim bindings. Why would I do this if I don't believe there's much point? I have two reasons for this:

The first is that Vim, unlike most other editors, is optimized for editing, not writing. Unlike other editors where the default state is typing, or writing text, Vim defaults to a mode for editing text, navigating the text, and doing other operations on already written text. For the little time I spend writing code, most of it is actually spent editing it, not writing new code. This also leads into the my next reason.

My second reason is that it enables me to transfer what I have in my head to the screen faster. If I want change the arguments to a function, I can more quickly change them by using a couple of Vim shortcuts, than I could by doing with a write-first editor. This is without a doubt a micro optimization when it comes to speed or productivity, but it is a boost in less frustration when editing. I feel I spend less time transferring my thoughts appear on the screen, which I find a win.

I'm not going to claim that Vim (or Vim bindings) is going to make you more productive or less frustrated, but it makes me feel less frustrated, which makes me a happier coder. And a happy coder is a better coder.

Happy coding!