24 hours with Emacs (a hasty rant)

The process I outlined at the top of my recent post on modal editing missed some steps, which are italicized below.

So yeah, I did that. Per the cycle, I was once again confidently moving away from modal editing, but I still wanted an editor I could run in the terminal. Yadda yadda; so I spent the last day feverishly re-learning Emacs.

But minutes ago I decided to bail on it, and here are some hasty thoughts in support of that decision.

Note: I’m about to complain a bunch about Emacs. So I’ll say at the outset that I think Emacs is dang cool. Amazing, really. That’s why I come back to it every so often. If you’re an Emacs person, I respect and admire and am sorta jealous of you. That said…

My purpose for trying Emacs was to have a terminal-based editor that’s vaguely similar to a native macOS text editor. As you might know, macOS has many baked-in Emacs movements. See this post from Jason Blevins for some good details on this.

But the similarities between Emacs and macOS are vanishingly thin. Emacs goes so much deeper so quickly that, within an hour or so of getting reacquainted with it, the thought of using it “because it feels like macOS” was profoundly laughable.

Instead, I found myself studying all sorts of commands, patterns, philosophies, etc. that aren’t relevant to any other editor. (Kudos to Mastering Emacs though for being a wonderful guide, btw.) Plus, while you certainly can run Emacs in the terminal and many do, most Emacsers seem to recommend running the GUI app for the best and fullest experience, so I started doing that.

And thus, my two justifications for trying Emacs — similarity to macOS and having a go-to terminal editor — went up in smoke pretty quickly.

What other justifications are there? Fun, really. I think that’s the only indisputable one. There’s an upvoted Reddit comment somewhere that says that, but I can’t find it now.

And it is fun. Too much fun. That’s the problem. I got up at 5:30 this morning to study and practice Emacs. Two hours later, when my family woke up, I was annoyed that I had to stop. I remember this feeling from the last time I dove into Emacs years ago. It becomes all I can think about, creating a sort of persistent and irritable obsession. My wife notices. This is not good for me.

It’s not more efficient or faster. No way. If you say that, I laugh at you. Not when VSCode or Zed or just about any “popular” editor pops up and lets you get right to work.

And look, I’ve said it before, but it’s relevant: I’m pretty damn fast at macOS text editing. I’ve been at it for over 20 years. This is why Vim feels kludgy, too, even once I’m starting to get fast at it.

Poke around Reddit and you’ll see comments like,

You learn Emacs once, and you have an editor for life. Who knows how long — what’s it called? Zed? — will be around?? Emacs stands the test of time. Jesus was catching up on his RSS feeds in Emacs just before the crucifixion, you know.

Sure fine okay. But once you’re fast at the macOS defaults, you’re pretty much fast at any editor that comes along. Zed gets blocked at work, and I switch to VSCode. I want a zero-distraction editor, and I hop into iA Writer. I need to write an email, and I do it in Gmail or Fastmail. They’re all different but feel similar enough to me. The basic cursor movements work the same across all of them. There’s no huge learning curve or switching cost. Certainly nothing like the cost of learning Emacs.[1] And that’s awesome. That’s freedom.

I know where Emacs and Vim mastery lead: wanting to do damn-near everything in your editor (or whatever you call Emacs 😉), and feeling some level of discomfort when you can’t. This is especially true for Emacs because it can actually do damn near everything. That’s not a place I want to go, honestly. I see that as a constraint rather than a feature. See above re: freedom.

And good lord, the mental overhead of trying to learn Emacs at a deep level. It’s immense. “Just use the basics,” some say. But I can’t, not knowing there’s this ocean of nerdy tools and tricks just underneath. It’s like telling a hungry dog to ignore a t-bone steak.

Hot take: For my basic-bitch needs, VSCode’s git UI is just as good if not better than Magit.

Hot take: TRAMP sucks. Again, for my needs, and specifically compared to VSCode or Zed’s remote SSH features. I’m sure it was innovative and amazing at one point. But from my perch, TRAMP is slow, doesn’t remember remote projects, causes LSPs and such struggle, and doesn’t handle port forwarding. Sure, you can optimize it and customize it endlessly. It’s Emacs, after all! But out of the box, it doesn’t hold a candle.

Going back to terminals, I’m plenty happy with the integrated terminals in VSCode and Zed. They feel mostly like a “real” terminal pane in my emulator of choice. I like that I can toggle them so easily with Ctrl-<backtick>. Emacs’s terminal options work, but they’re kinda wonky by comparison. That’s probably why there are several different options — shell, eshell, vterm, etc. I’m sure I’d get used to one of them, but again, it feels like a regression.

(For a good time, run lazygit inside M-x shell.)

The Emacs chords for navigating buffers, tabs, etc. are slower and clunkier than the equivalents across macOS. In my opinion. Again, I’m biased because the macOS stuff is in my bones at this point.

Emacs server and emacsclient are cool but confusing. I installed Emacs via the generally recommended homebrew-emacs-plus package. Sometimes Emacs.app would just … do nothing when I opened it. I assume a preexisting server process was stuck somewhere. And when I’d launch Emacs Client.app, it would load its own frame (a “window” in typical parlance) even when I instructed it not to, and that frame didn’t seem to have any of my init.el settings loaded.

This is about the point where I said, fuck this, it’s not worth it.

When I end up torn about a decision like this, and I often do, I try ask myself these two similar questions:

It became hotly evident that Emacs is not the simpler or less-resistant path in the TextEditorverse. Meanwhile, from this angle, VSCode[2] is really hard to argue with.

Case in point: I just banged out this blog post very quickly with what felt like zero friction in VSCode. I wrote it at the “speed of thought,” as the Vim people like to say in somewhat smug praise of their editor. I’ll now do the git stuff in a matter of seconds. If this is already so comfortable and fast for me, what else am I trying to find?[3]

I’ll close by repeating: Emacs is amazing. In many ways I love it what it stands for. But it’s not healthy for me, not at this stage of life anyway, so I have to get mad at it in order to distance myself.

If you’re a newbie and considering Emacs or Neovim, here’s my advice. If you’re just wondering if one or the other will make you more productive in a general sense, stay the hell away from both. If, on the other hand, you have a specific, unfulfilled need, like editing code on remote servers, or you just want to learn and experiment and have a geeky adventure, by all means, go for it. They’re both great.


  1. Maybe that’s why so many Emacs folk are hung up on never having to learn another editor; they still have PTSD from learning Emacs. 😆 ↩︎

  2. I’d have said Zed instead, but it’s quasi-blocked at work, so it’s now a path of significant resistance. ↩︎

  3. Oh right, M-x enlightenment-mode. ↩︎