About two weeks ago I got scolded by someone on Twitter for corrupting the young impressionable minds by advocating and evangelizing the use of Vim as a text editing and programming tool. It sparked quite an interesting discussion, and in the end, being a nice guy I agreed to disagree and let my peer in geekery have the last word.
I believe the crux of the argument was that Vim is a usability nightmare – it has a very steep learning curve, sparse UI and it doesn’t use the standard key bindings. Or rather it doesn’t support one of the many, often contradicting sets commonly used key bindings. I mean, let’s face it – there is no standard here.
Yes, almost everyone agrees which binding to use to save, cut, copy, paste and undo but beyond that few editors agree. What is the standard key for redo? Quit without saving? Open a new tab? Search and replace? Few editors agree on these, so knocking Vim for being only slightly more quirky than everyone else. Especially since the latest versions of the editor ship with an “easy” mode that eschews modal editing and makes it behave like a glorified Notepad. Or you can just download Cream if you are so inclined.
To me this is a waste, because Vim’s power lies in the modal editing. Vim is powerful because it ships with an incredibly rich set of commands that can be chained together forming a kind of a language. A lot of people dismiss Vim’s interface as simply being backwards. I heard people say that vim “drives” the way it does because it is developed by unix beardos and dinosaurs that refuse to accept change. This is obviously wrong, as evidenced by projects like Cream or the easy-mode in the default bundle. You can make Vim “user friendly”. It is just that most vim users don’t want it to be “user friendly”. This is not the selling point of the editor.
The selling point of Vim is the raw power. It is the internal “editing language”, reach feature set, configurability and huge library of plugins and the VimL – the embedded, Turing complete scripting language. Vim is a power tool, and as all power tools it trades off usability for raw power and flexibility. Vim is the Hole Hawg of text editors:
People sometimes need metaphors to understand complex computing concepts. I didn’t make this one up – this one was born in the mind of none other than Neil Stephenson who compared Unix OS to the Hole Hawg power tool. But I think the metaphor can be extended to serve the Vim vs modern editors argument. To quote Stephenson:
The Hole Hawg is a drill made by the Milwaukee Tool Company. If you look in a typical hardware store you may find smaller Milwaukee drills but not the Hole Hawg, which is too powerful and too expensive for homeowners. The Hole Hawg does not have the pistol-like design of a cheap homeowner’s drill. It is a cube of solid metal with a handle sticking out of one face and a chuck mounted in another. The cube contains a disconcertingly potent electric motor. You can hold the handle and operate the trigger with your index finger, but unless you are exceptionally strong you cannot control the weight of the Hole Hawg with one hand; it is a two-hander all the way. In order to fight off the counter-torque of the Hole Hawg you use a separate handle (provided), which you screw into one side of the iron cube or the other depending on whether you are using your left or right hand to operate the trigger. This handle is not a sleek, ergonomically designed item as it would be in a homeowner’s drill. It is simply a foot-long chunk of regular galvanized pipe, threaded on one end, with a black rubber handle on the other. If you lose it, you just go to the local plumbing supply store and buy another chunk of pipe. (…)
I myself used a Hole Hawg to drill many holes through studs, which it did as a blender chops cabbage. (…) Where my homeowner’s drill had labored and whined to spin the huge bit around, and had stalled at the slightest obstruction, the Hole Hawg rotated with the stupid consistency of a spinning planet. When the hole saw seized up, the Hole Hawg spun itself and me around, and crushed one of my hands between the steel pipe handle and a joist, producing a few lacerations, each surrounded by a wide corona of deeply bruised flesh. It also bent the hole saw itself, though not so badly that I couldn’t use it. After a few such run-ins, when I got ready to use the Hole Hawg my heart actually began to pound with atavistic terror.
But I never blamed the Hole Hawg; I blamed myself. The Hole Hawg is dangerous because it does exactly what you tell it to. It is not bound by the physical limitations that are inherent in a cheap drill, and neither is it limited by safety interlocks that might be built into a homeowner’s product by a liability-conscious manufacturer. The danger lies not in the machine itself but in the user’s failure to envision the full consequences of the instructions he gives to it.
When people tell me about their swanky modern editors such as TextMate or Sublime Text I see this:
I see a home owners power drill. Don’t get me wrong – it is a nice tool. It has that nice ruberized pistol grip and a neat ergonomic design. You can operate it one handed, it is wireless, light, portable and pretty easy on the eyes. It is a nice tool. But it is not vim. It has a lot of features, and it is a joy to use but it is not even in the same league as vim.
Can you re-define every key, combination and command in these editors? No you cannot. Do these editors ship with a domain specific scripting language whose sole purpose is creation of plugins and extensions? No, most don’t.
Saying that Sublime Text or TextMate have “roughly the same feature set” as vim is like saying that Honda Civic has roughly the same feature set as the Harrier Jet because it can be used to get from point A to point B. The only editor that is in the same league as Vim is Emacs. And I wouldn’t call Emacs user-friendly either.
These editors are power tools for power users. Not everyone needs a Hole Hawg. In fact, not everyone should use a Hole Hawg. Which is why the market for plastic, safety-enabled home owners power drills exists. The Hole Hawg is a specialized tool for professionals and it takes certain amount of practice, skill and responsibility to use. Which is not to say it is not suited for those outside the construction industry. An amateur builder can pick it up, and learn to use it just as easily – and probably never use another “power drill” ever again. Conversely, a lot of people will probably see a Hole Hawg and wonder why on earth anyone outside heavy construction would ever want to use such a monster. And it is an equally valid point of view.
Different programming ecosystems exist to fill different needs and styles of individual coders. Usability is important, but it is only one axis of the spectrum. It is not be all and end all of computing. Raw power and configurability are very important too and sometimes you have to make trade-offs.
If you don’t like Vim, don’t use it. But don’t knock it for being backwards. Do people really think we use vim just to be cool, retro hipsters? Would we willingly subject ourselves to a “clunky usability nightmare” just for the geek cred?
Perhaps we simply do not see eye to eye on what “usability” actually means. To me, a usable tool is one that lets me do my work efficiently, comfortably and without getting in the way. Vim does that, and more. In the hands of an experienced user, Vim is extremely powerful and flexible. It can do things other editors will never be capable of (except maybe Emacs but we’re not talking about that right now). But is it newbie friendly? Does it have a gradual learning curve? Not really.
Well, it kinda does. It has the training wheels easy mode. The Windows version actually ships with common Save, Copy, Cut and Paste bindings. Getting into Vim is not entirely like hitting a brick wall. But what Vim offers is a bit of a different approach toward text editing – it approaches it from a different direction than most text editors. As such it is a different tool for different people.
Don’t like using it? That’s perfectly ok. There are hundreds other editors out there. Don’t think it can help you be more efficient? That’s all right, we all have to find our own way. But don’t knock it as an outdated relic of a bygone era.
Vim is like a Ligtsaber. Not as clumsy or as random as your average text editor. An elegant weapon… for a more civilized age. And it takes a little bit of skill, understanding and respect to use it properly.
Really good post. I share most of your thoughts when it comes to use power tools vs “usable” tools. I’m actually a bit unhappy that the practice of specialized tools for programmers only extends to software. I wonder how much more we could do if we had a culture of specialized “pro programming” hardware just like there are pro tools for musicians and engineers. But maybe with the proliferation of limited capability tablets as the baseline for computing we’ll see desktop and tablets morph into pro tools with some features targeted at programmers.
It’s interesting that you should use the Lightsaber metaphor. I wrote an article comparing Emacs and Lightsaber combat a few years ago.
1. Vim does not have a good usability
1. Vim does not have a mediocre usability
3. Vim does not have a bad usability
4. None of your arguments in this article have anything to do with usability
5. You cannot measure usablity if you have not defined the user group
6. You cannot measure usablity if you have not made a few tests on the user group
7. People who talk about “bad usability” on the internet usually dont have a clue what theyre talking about
8. People are not experts
Dammit, Luke. Stop adding fuel to my vim evangelism fire. I’ve already pissed off my friends with this enough. They just won’t see the light. ha.
Best response I’ve gotten to saying I like Vim: “You have to learn how to use a text editor. …that’s not for me.” ~JK
@ Shrutarshi Basu:
Interesting. What would you consider “pro-programming” hardware though? I mean for me a programming workstation involves:
– A high-end fast workstation with a lot of memory
– Dual monitor setup
– A comfortable mouse and a keyboard with an ergonomic design
I mean, everything else is just software.
Oh, and nice blog btw. Subscribed.
@ MrJones2015:
That’s a good point. I have no clue what I’m talking about most of the time. :)
@ Alex Reinisch:
Yeah, I love that attitude “What? I need to learn? Fuck that shit! LOL!”
Granted, I do see valid reasons someone might be hesitant to make the plunge. They are the same reasons why I’m hesitant to switch to say “DVORAK” keybord layout. Because it fucks with your muscle memory and learned habits, and will make you slow for a while, before you will make you fast.
So that is one valid reason why someone might not want to get into Vim or Emacs. :P
@ Luke Maciak:
I remember that there used to be specialized keyboards for programing languages. They’d have characters for whatever special symbols that the language used for construct. Case in point are the Lisp Keyboards. Today for example, what’s the point of having a numpad on keyboards? And function keys go unused. Why not use those keys for programmer functions (like stepping through a debugger)? Of course, a lot of this could be done in software but it would be interesting to see what we could do if we moved away having the same keyboard layout for everyone. Ergonomic keyboards and mice are a step in the right direction though. A lot of people in my lab use the Kinesis Advantage keyboard and various trackballs.
I can still clearly remember being introduced to vi back in 1998 when I first took a job in IT as a programmer. I was initially a die-hard emacs/notepad user. Cut-n-paste worked like it did on just about every platfrom I used prior. I was introduced to vi by a system administrator. First impression . . . I hated it! It wasn’t until I became a sysadmin myself that I would learn to appreciate the hidden power buried deep in vi. Booting UNIX systems in single-user mode only left the admin with a small choice of editors, usually vi or ed. Naturally, I learned vi as a survival tactic. Later, I bought the vi command reference coffee mug and grasped the power of a modal editor! I can move text around so much easier in vi than I ever could with a commercial app like Word. Granted, vi is not for publishing or typesetting. It is a good old fashioned text editor, but a damn good one. Unfortunately, the power can not be seen with a simple test drive.
I am still trying to learn Vim, because of your recent series of posts on why and how to use Vim. What little I have learned from the tutor and the help documentation is really powerful. So I am happy to learn to ride this “hawg” and learn more quirks. Thanks for all the insight.
I’m not sure if vim really has such a steep learning curve. If you use vimtutor, you’ll have a pretty good start. Once you have worked throught the tutorial, you should know how to edit text. The next step is then to learn how to edit text efficiently. This will take time. But that’s pretty much the same with other editors. You have to discover new key-combos for yourself. And with vim you can easily look up these combos in the help pages.
I guess a lot of people learn to use programs through trial and error (which also applies to me sometimes). Partly because reading a manual is boring and partly because some things can easily be guessed. You can’t do that with Vim. You need a different approach.
One such approach is vimtutor. And because vimtutor is actually an interactive tutorial, it is fun to go through it. If people think Vim is too complicated, let them try vimtutor and they may understand that vim isn’t just an old and weird text editor but has actually some good ideas behind it.
And if you are an IDE-guy you can use plugins to add the features you need.
Hello from consoleland! My text editor history is probably bit strange. I started with notepad, then moved to edit, then notepad++, then in linux to nano. I tried vim but found it bit too intimitading but later after I had mastered ed I tried vi (not vim) and I liked it very much. I still use ed but I am mostly vi user now. I kinda dislike vim for the bloat it has. Vi on the other hand is light and powerful tool that I just love. Still my ideal editor would be a bit more like plan9 sam. It is bit more flexible with the mouse controll but it doesn’t run that well with no devdraw/devdraw emulation under x11.
I’ve recently switched from Vim to SublimeText2, and I think I understand why people are raving about it. It does away with the steep learning curve, yet it is also a powertool, unlike most glorified Notepads out there. ST2 is highly configurable, and extensible, it has quite a few advanced editing techniques, and the only thing I’m missing are Vim’s jump-to-last-edit, spelling, and movement commands. On the other hand, I find that block editing in ST2 is even better than in Vim. Anyway, ST2 is quite young as a product, but I’m sure it will mature into something comparable to both Vim and Emacs with time.
On the Mac, they mostly do. Command-shift-Z. Command-W, then command-delete. Command-T. Command-option-F. These seem pretty standard to me, outside of the Emacs/Vim world.
Seatbelts and radios are not the selling point of a Ford truck, but that doesn’t mean it doesn’t have them. Even big trucks today (the Hole Hawgs of the automotive world) have amenities that only luxury cars had 10 years ago.
Have the Vim developers truly been unable to improve the basic usability of Vim without sacrificing power? Every other category of software in the past few decades seems to have gotten both far more powerful and more usable. It’s hard to believe that the pinnacle of text editing power cannot have a user interface any better than Vim.
Even the Milwaukee Tool Company knew that they didn’t have the final word on putting holes in things: their new Super Hawg is not only more ergonomic and attractive than the old Hole Hawg (they brag about its “Comfort grip”), but twice as powerful.
I assume that many do. It would be shocking if they didn’t. People do far more impractical things for street cred every day.
This article reads like an apology for Vim’s usability, but you never explained exactly how other editors are less powerful. Aren’t all text editors with customizable keybindings and a (Turing-complete) scripting language roughly equal in power? Is VimL better than Elisp, REXX, Tcl, or Lua? Not that I can tell: people who use VimL always seem to be complaining about how horrible it is as a language. In fact, even though I know relatively few Vim users, I’ve heard more complaints about VimL than about the other four scripting languages combined. Vim is more famous for being hard to use than for being extensible.
Ed is even harder to use than Vim. Does that make it even more powerful? Or could it be that “power/usability” is not simply a one-dimensional scale, and that lack of one does not necessarily imply an excess of the other? Vim may well be more powerful than other editors, but you should argue that by demonstrating how it’s powerful, not simply pointing to products in other fields that are hard to use. People who aren’t already Vim advocates aren’t going to believe that text editing has the same inherent complexity as a carrier-capable military VTOL jet.
Richard wrote:
Yeah, I didn’t explain it in this post. I did give examples in another post though. The main selling point of Vim is the modal editing paradigm. You have insert mode, in which you just type words and the normal mode in which each key on your keyboard does something. There are different types of keys:
– movement keys that reposition the cursor
– actions such are replace, delete, change, etc..
– objects such as word, sentence, paragraph, HTML tag, indentation block etc..
– object modifiers: inside the object, around the object, etc..
– repetition keys that let you chain actions
– utility keys like . which repeats last sequence or q which starts recording a macro
So in essence, Vim has a “vocabulary” from which you can build command sentences. For example, lets say you are editing a web page, and you want to replace the text within the h1 tag. A Vim user will basically think about this action in terms of vim commands and objects change inside tag or c i . You can be anywhere within the tag, and this command teletes the contents and puts you in insert mode so you can type new content. Want to delete a long list of arguments from a function call and call it without passing anything instead? delete inside parens or d i (.
You can also hit q and record a whole chain of commands an the replay it on arbitrary lines. Without modal editing, you can’t have Vim’s internal vocabulary. Without the internal vocabulary, you don’t have the power. I haven’t really seen any other editor do anything like it. Well, except Emacs in Evil mode. :P
Richard wrote:
VimL is absolutely dreadful. You can write plugins in Python or Ruby though with just a little VimL boilerplate to connect it, but that makes your plugins less portable. To me Vim is more about modal editing and extensibility second. If I was mostly concerned about extensibility I’d be using Emacs. That said I’ve been reading a lot blogs by Vim users who jumped ship to Emacs and kept modal editing using Evil mode and managed to port majority of their setup using native Emacs plugins or writing custom scripts.
But yes, VimL is shit. There is no denying that.
Richard wrote:
I agree. I guess I didn’t want to repeat myself in this particular post, because I wrote a lengthy essay doing exactly that a few days earlier: pointing out good things in vim. You can read it here.