Emacs is my main IDE. It is powerful, versatile, and very stable. It has a few limitations I can live with, like the absence of multi-threading, which sometimes gets in the way on rare occasions. Native compilation gave it wings and the Doom configuration layer enables an improved UX, great keybindings and sane defaults. Did I mention Org, and more particularly Org-Roam?
On a side note, Elisp (is a (nightmare (of brackets (you) need to (follow through) (and count) (which (I suck at))))) — more on that in another post about programming language UX and why I love Ruby. But in the end, I can live with a few crashes here
and there as I get lost in the bracket maze when editing my config.el. I can count.
That said, there is some friction involved when using Emacs. MacOS integration is not perfect, especially when it comes to managing the emacs daemon. I cannot make Dape (the DAP mode for emacs) work with ruby. I also find the UI to be a little slow: typing has a tiny slight delay which kind of gets annoying in a subtle way. And that slaps you in your face when you open Neovim.
I’m a TUI nerd, so Neovim is one of the alternatives I turn to when I get bored or annoyed at Emacs. Like Emacs with Doom, Neovim has the LazyVim configuration layer to ease most of that side of things. Lua has a much better UX than Elisp, and man, the whole beast is blazing fast, both in terms of loading time, overall snappiness, and typing rendering. Some plugins are really better than the Emacs stuff (thinking about vim-dadbod-ui — what a funky name, btw), some less (try to beat Vertico + Marginalia + Orderless). Debugging ruby stuff works out of the box.
I have made my Neovim as similar to my Doom emacs configuration as possible, so switching is close to seamless. But I
miss a good integrated terminal experience - I am not very happy with how :terminal behaves, and it feels kind of odd
to open a terminal inside an IDE which lives in a terminal. I am trying to find a way to overcome this, but for now,
this is where some of the friction comes from.
This is usually when I open Zed.
(Well, sometimes, I will start a Helix session, get excited by the speed and simplicity, and then get frustrated for the lack of a plugin system — mainly for git/JJ, running tests and that stuff — read the 11-month-old release notes and related issue/PR threads, realize this is not going anywhere, and only then, open Zed.)
Zed is cool. It is like VScode stripped of the bloat and all the Microsoft cringe. It is sexy. Its development is
moving fast. It features AI as a first-class citizen, but does not shove it up to your face without asking you first, and you can ignore it altogether. Zed respects
its users by trying to serve them with a good product, not shove <paste the latest hype> junk down their throat to
get ready for the next VC fund. At least for now.
Zed is not a TUI, but it is damn fast. I get all the snappiness of Neovim, along with most keybindings. I get a rich plugin ecosystem. But it is still somewhat limited compared to Emacs and Neovim — I am not blaming the Zed team, though, I am comparing a 4-year-old project to IDE veterans (considering Neovim and its ecosystem is built on the foundations of Vim).
Zed is currently lacking a Telescope-like picker (but it is coming), a merge tool, and a more capable plugin system to be able to connect to, and manage your database, for instance, or offer the possibility to manage Jujutsu natively (you can do some of that stuff with workarounds, mainly with tasks). But the main friction comes from the Vim keymap integration: it is good, but it is not available everywhere… like, you cannot do some stuff when in menu mode. So if you want a mouse-less experience, it just does not cut it.
So I launch Emacs… Emacs is where I feel at home, wearing my comfy slippers. I am editing the final draft of this post in Emacs right now, actually.
But that’s until I get frustrated again and decide to launch Neovim again…
What is wrong with me? 🙄
