>

Web development technologies, especially front-end related ones are changing rapidly in the past few years.

One of the unexpected areas they have entered (personally) are the text editor space. The well known ones these days built from web technologies are Atom and Visual Studio Code.

I consistently get questions regarding Emacs from people considering switching to it but are not sure what kind of horror stories are awaiting them so hopefully this would shed some light.

What is Emacs?

In case for people who are not familiar, Emacs is an editor that was released in 1976, which is around 43 years ago at the time of writing this article.

It’s built from Lisp and C, and is cross platform till this day. Meaning you won’t have issues running it in Apple, Linux or Windows (actually I don’t use Windows so not sure :P) devices.

emacs-sample.jpg
Sample look of Emacs with LSP as code completion for Golang and Rust

So like everything in life, there are always some kind of opportunity cost to decisions and everything is a trade-off. Here are some hopefully unbiased Pros & Cons if you’re considering something like Emacs.

Pros

Fast

Yes, that’s right. It’s actually fast and doesn't take like 16ms to render text on your bloody screen. So you can actually have a pleasant experience if you are used to doing blind touch typing and not get irritated every time when latency happens from your keystroke until when it shows up on the screen.

It can also be extremely fast to setup, since configurations are just dot files which makes synchronizing configurations between computers extremely easy. Download the dot file, boot up Emacs and you’re ready to go!

Wide list of plugins and support

Since it has been around for over 40 years at this point, you can basically find a plugin for almost anything you want to do.

Programming language support, git operations, google search, you name it. I bet it’s actually harder to find something it can’t do.

You can also go pretty crazy with it, like view, compose, send emails, even browse the internet with Emacs. If you’re using the GUI version of Emacs, HTML can actually render so it’s a pretty interesting experience, literally having code and browser side by side.

To be honest, I figured that I just want to see text on my editor so I don’t do the those crazy things anymore. You know, A Mistake of Youth.

Keyboard only navigation

To be accurate, you can still click around in Emacs, but you don’t need to. Everything can be handled with your keyboard and this actually contributes a lot to the speed of editing too. It doesn’t mean that writing fast is always good. What good is there if you produce s**t 10x faster, you know like (my) definition of a 10x engineer? But if you can express your thoughts in a shorter amount of time, why not? That small amount of time will add up and you can get hours back per day. Like literally.

It’s always kind of funny to hear a fellow Emacs user who have to use a different editor temporarily and complains that using a mouse just slows them down tremendously.

No offense to anyone who uses a mouse, it just feels very weird to have to use one when you got use to handle everything with your keyboard. It’s like, “wait, where is my hand supposed to go now?” and have to pause for a few seconds deciding on your hands’ next move.

Oh and it also makes file editing in servers easier too.

Multiple files in one screen

This is actually unique to Emacs (and Vim) where each file is a buffer and the concept of a frame and buffer is different so you can have a loooooooot of buffers in one frame.

This work very well if you have a very short memory span. Like literally have your memory wiped while switching screens and you have no idea what you were supposed to be looking at so you switch back to the previous screen, repeating this back and forth like I don’t know how many times wasting hours just trying to figure out what you were thinking about 2 seconds ago.

At a bare minimum, I will always have 3 files opened and sometimes more than 8. I get the same comment from all my past and present colleagues when they walk pass my desk.

“I have no f***ing idea how you even operate with that.”

Cons

High learning curve

I’m pretty sure this is one of the common reasons that bars people from using the tool. Emacs Lisp, while it’s extremely flexible and fast (compiles to byte code), it has a syntax a lot of people are not used to.

Default key strokes in Emacs can be awkward at first as well. For example, saving a file is Ctrl-x Ctrl-s. That’s 2 key strokes and seems more effort for a lot of people when you’re used to just doing Ctrl-s or Cmd-s for saving a file.

If you’re willing to stick with it, you’ll be amazed how fast it’ll become going through all those weird key stroke combinations thanks to muscle memory, but your productivity will definitely slow down for some amount of time until that memory sticks.

Extreme customization

Related to the key stroke combination above, some crazy people (like me) go extra steps to customize Emacs to fit their needs. This is one of the double edged sword characters of Emacs, because it makes pairing soooooooooo much more painful. You can hardly pair with even a fellow Emacs user, since it will feel like you’ve suddenly entered a different universe.

But hey, I don’t work at Pivotal, therefore I don’t pair 100% of the time so it should be fine right?

Documentation

If it has been around for such a long time, wouldn’t there be plenty of documentations?

Yes, there are tons of them. But also a lot of them are outdated so there could be struggles when you try to do something following the documentation you found online and it completely blows up on your face.

Package repositories are also kind of scattered around both up to date and outdated so you might need to connect to all of them in order to get the package you want. Looks like people are finally deciding on a single source of truth these days so hopefully life will be easier when you are just trying to install a plugin to test it out.

Some distributions like Spacemacs can help by providing a layer of abstraction so you don’t need to handle all the details yourself. It also provides a nice set of defaults, but if you’re the kind of person that wants to know what each of you configurations does… oh well, you have been warned.

Why Emacs

So, should you switch to Emacs?

To be honest, you don’t need to. Like I said earlier, everything is a trade-off. So if you’re the kind of person who don’t care about the tool and want it to just work, then VSCode, Atom or Sublime is a better fit for you.

If you’re the kind of person who cares more about performance and don’t mind investing a little time to get that, then I think Emacs is a great editor, even after 40+ years since its creation.

How about Vim?

Pros and cons wise, Vim is pretty much the same. I was initially a Vim user, but had to switch to Emacs for performance reasons when editing large files x amount of years ago.

To provide a little more context before I get backslash from enthusiastic vim users.

Back at the time when I decided to switch to Emacs, I was doing

  • Linting
  • Code completion
  • Auto code format after save

on all opened files. Vim wasn’t able to do async operations back then so whenever I opened a giant file, it takes like 5 seconds for my typing to show up on the screen, and I think everyone will agree that 5 seconds is unbearable. I’m complaining with 16ms so you can tell that I was tearing my hair out with that amount of latency. But I didn’t want to disable all those settings so I decided to give Emacs a try since I heard it compiles to byte code and I thought I would be able to keep the best of both worlds.

Being lazy with code and have it render fast on the screen.

And as expected, it worked great ever since! Vim and the newer rewrite NeoVim both have async APIs now so you shouldn’t encounter the issue I had anymore.

If you’re considering Vim, definitely give it a go. I still uses Vim as my sub editor for quick edits, because to be honest, it actually loads way faster than Emacs but I just don’t have the motivation to maintain 2 configurations.

The next cool kid? editor? around the block

I’ve been tracking the Xi editor for a while now. The design philosophy is something I like a lot, and it looks like it a Emacs/Vim rebuilt with modern technologies, also learning from past lessons.

Unfortunately, it is not ready for a day to day work level yet, so if you are interested in a performant text editor, give Emacs a try for now.

I personally think it’s worth the investment but I would like to know what you think about it too!