I’ve been using vi/vim since 2005. 19 years is a long time to use an editor, and switch. It was good knowing you vi, but it’s time to move on to bigger and better editors.
Just kidding, I’m moving onto neovim, the latest and greatest vi derivative, here’s why:
vi/vim have served me very well for text editing and integrate nicely into the unix shell. However…vi/vim are not made to be extensible. vimscript is an awful hack. They’re made to edit text and they do that well, but nothing more, which in the 80s and 90s was the right choice.
But now, in the 2020s, text editors need some level of extensibility to handle integrations with things like static analysis tooling and genAI. Text is not just edited in isolation, but in coordination with feedback from various daemons. Here, neovim shines as neovim is an extensible vim. A vim you can plug things into.
By 2024 it’s fairly popular. Using the highly scientific reddit usercount metric, we see:
r/vim: 175k
r/neovim: 98k
r/emacs: 72k
r/vi: 1.5k (multiple undo is very important guys)
neovim has over 50% the users of vim, and more than emacs! Popularity matters because it means tons of community support which means extensions, documentation, blog posts, and ample training data for genAI. All free! So, neovim’s good enough here.
Why not emacs?
emacs is way more extensible than neovim. It’s the most extensible program ever written. I gave it serious consideration because if I needed an extensible text editor, well that’s emacs. A number of years ago, I thought I’d learn emacs instead of going down the neovim route because of this.
However, a few things stopped me:
When it comes to text editing, vi and emacs are roughly equal in power. Both have configurable key bindings. Emacs has evil mode which allows for vi editing expressiveness. Vi can shell out any selection of lines to an external program and write it right back to where it came from. Emacs can too, and do any selection of text, but rarely do I care about the difference to need emacs.
I needed a lot less extensibility than I thought. Really just integration with static analysis and genAI for code editing and neovim handles that just fine. I don’t need org mode or have any desire to live in emacs, I’m already happy living in unix.
This is probably the most important one: I vibe best with the vim/neovim crowd1. At heart, I’m an efficiency focused pragmatist. I don’t really care that a/A i/I are redundant. It doesn’t upset me that :wq means :w + :q but :help doesn’t mean :h + :e + :l + :p. But for your typical emacs user, it’s horrifying. It’s inelegant! My impression of vi users are pragmatists who want to code fast (blog name!), and emacs users are beauty obsessed perfectionists who sometimes get efficiency as a side effect. vim users see the big picture and can handle some scuffs along the way to get there. emacs users will squabble over the smallest details if they’re not absolutely perfect, often ruining the big picture. Linus Torvalds, a classic pragmatist who somehow picked up an esoteric emacs variant, microemacs, also passes this vibecheck as he rails against GNU emacs calling it the “tool of the devil” and “absolute ****”. I’ll hang out with my fellow pragmatists.
Why not an editor with a GUI?
Then there’s all the GUI editors, Sublime, Atom, JetBrains suite, Notepad++, gedit, Cursor, and others that have come out that I’ve never heard of.
Frankly, I’ve never found one that:
Is low latency like vi
Lets me shell out to a command line easily. Never can I take some text, do :.! <cmd> and bam, text is now inputed into <cmd> and the output is returned back to the editor.
Lets me be as expressive as I am with vim bindings in normal mode. I always feel sluggish when in other editors (including the substack WYSIWYG)
Has some compelling benefit over vim
If you do know of one, let me know in the comments and I’ll take a look.
Why not Helix/Kankoun?
In writing this, chatgpt recommended Helix and Kankoun, two CLI vi inspired derivatives. Both look neat, and may in fact be more elegant than backwards compatible vi derivatives like neovim. However, I could not find any compelling benefit that necessitates me learning a whole bunch of new things for an esoteric editor. I’d rather learn and use something normal and standard if it’s almost just as good. Now, if they had a compelling benefit, that changes the calculus, but I couldn’t find one.
Why not ed?
You’re right, ed is the standard editor.
You’d think using vim for 19 years has something to do with the vibe check, but nope, complete accident. My first foray into linux was on a Tivo which was too underpowered for emacs but it did support elvis, a vi clone, so I started with that. I was exposed to emacs years later but already knew vi so never bothered learning it. Maybe if I was an emacser I would’ve been horrified by vim’s impurities, but like Linus, maybe if I learned emacs first, I would’ve used that too, who knows.
What about Cursor for amazing AI integration? LLMs are the future, right?
You might be interested to try Zed, which is a perf-focused gui editor with a pretty good vim mode and ai stuff. Having said that I’m a Neovim user still so 🤘