I’ve used a few editors in my career. I started with the venerable vi. No, scratch that. I started with Borland’s Turbo C++…​ No! Scratch that too. I started typing BASIC at an OK prompt on a CP/M machine.

But I digress.

Let’s say I started with vi. The first time I opened it, I had to reboot the computer to get out of the damn thing. By the time I discovered Emacs—thank you, philg!—I was already a proficient vi user.

But Emacs was something else. It let me live inside the editor in a way I hadn’t thought possible. I could customize every aspect of my editing experience. The catch was that doing so required knowing Emacs Lisp. Bleh.

While working on BitKeeper, I realized that most of my co-workers used Vim: a modern vi. So I switched back. Then my friend Tim reminded me why I had loved Emacs in the first place.

Back to Emacs I went.

At my next job, I was using more languages. Getting Emacs "just so" for Go and Rust was a PITA, mostly because of its archaic APIs and the Emacs Lisp requirement. Did I mention Emacs Lisp isn’t real Lisp?

And look! VS Code had excellent Emacs keybindings and made it easy to use rust-analyzer and gopls. It’s what all the cool kids were using, so why not?

Extending VS Code meant JavaScript or TypeScript, neither of which I knew. But most of what I wanted already existed and required little configuration. More importantly, easy code navigation and autocompletion trumped my desire to have the editor be "just so."

Then came LLMs.

"Claude, I like Ediff, but I want a navigation mode where I can keep hitting Space to jump to the next diff. At the end of a file, move to the next file. Make Shift-Space go backward the same way."

LLMs turned Emacs Lisp from a tax into an implementation detail.

Back to Emacs I go.