Dom.

My problem with emacs

I've been using emacs on and off for about 6 months now. Here is what I have to say about it.

The beginnings

After loving the experience Vim provided, I also wanted to check out Emacs. I was initially attracted to what org-mode could do, and I still think it's one of the best productivity tools for developers. The initial learning curve was difficult, however Doom emacs (emacs with Vim bindings) really helped be get started and enjoy it much quicker.

The good

I think Emacs is great, and given the right use cases it is the GO TO editor. The question is, is my use case one of them?

Here is what's good about emacs:

  • Magit - it is hands down the best Git integration tool I have ever used.
  • ORG Mode - again, markdown has nothing on ORG Mode + ORG Agenda.
  • Swiper - project-wide file content searching, replacing regex expression in real time, and many other features.
  • Low RAM usage - unlike VsCode, it's not an electron app that will eat your RAM.

The bad

Don't get me wrong, I like Emacs. I even wrote an article on what's so great about Emacs.

Language Server Protocol

I tried to make Emacs my daily driver, but at some point I ran into issues. Many of my projects are in Go, Rust, and TypeScript, basically meaning I'm a spoiled vscode/vim(coc.nvim) user that's used to amazing IDE-like LSP features. Turns out emacs also supports LSP, so I installed it and gave it a go.

Compared to my vim experience, I found the LSP to be slow, sometimes lag, sometimes not activate at all. Not to mention syntax highlighting would sometimes take a few seconds to activate, and it's not like I have a weak machine (6 core xps 15 laptop). Oh, and the launch speeds of emacs are ridiculously slow once you add some plugins. Turns out Emacs can only run on a single thread (due to elisp limitations).

After all, I found myself wasting much more time than ever, figuring out why my Language Servers were lagging behind, even trying different implementations (lsp-mode and eglot) to no avail. Call me dumb, but I couldn't get it to work as quickly and reliably like it used to work in Vim.

However I can see how Emacs could be a great solution for someone, but it's not (at least in the current state) the best solution for Software Development. I think it's much better for sysadmins, lisp lovers, and writers (it works great as a "notebook").

Debugging. Wait, what's that?

I get it. Not everyone uses debuggers on a daily basis. Neither do I, but when I do need one I don't want to have to switch to another editor just to debug one problem.

We're at a point where debuggers in vscode can do amazing stuff with JS, Go, Java, C++, hell even Rust.

Slow development

Unfortunately Emacs doesn't have the financial backing or the man power of projects such as VsCode. I found even things like JSX unreliable in Emacs. Of course, I could look at the plugin's source code, try to figure out what the issue is and submit a pull request. But I don't have time for that.

What now?

As much as I wanted to stick with using Emacs, I found it doing the opposite of helping me stay productive. It often kept me going back to the configuration, trying to fix issues with the languages, or figuring out why things are as slow as they are. I even spent countless hours trying to write my own emacs configuration from scratch, based on Centaur and Doom, but in the end, after adding essential plugins, it started to slow down again.

I decided to stick with Emacs for org-mode and use VsCode with Vim for everything else.

Dominik Tarnowski
I write code.