My Favorite Emacs Add-Ons

I love Emacs. I’ll take it hands down over vim, Sublime, Atom, and company any day. I thought I would take some time to list some of my favorite bits of Emacs and how I use them in my daily workflow.

1. Magit

Magit is an Emacs interface for git. Beyond that, it’s the best interface for git I have ever used — better than the git CLI or third-party apps like SourceTree. Magit reduces most git commands (and all of their cryptic flags) to a series of one-character shortcuts. It also introduces interactive status and log buffers that are comparable to any other git gui out there (and better than many). The best part is that version control becomes part of my editing workflow and requires no context switching. Overall I find that it massively speeds up and simplifies my git workflow and encourages me to use my VCS to its fullest extent.

Magit in action
Emacs showing the Magit status buffer, git log, and inline blame for a file.

2. Evil

I’ve previously blogged about Evil and how it allows me to get the efficiency and ubiquity of the Vim workflow inside of Emacs. I find modal editing to be far superior most of the built in Emacs text editing commands, but the best part of Evil is that I don’t have to choose. By adding Evil, I get all of the various Vim editing modes and the goodness that comes along with that. But at any point I can press “i” and I am in insert mode, which is just plain old Emacs.

3. Textmate

Keeping with the theme of stealing great features from other editors, another favorite of mine is Textmate mode. Textmate mode adds one of the killer features of Textmate — project-aware fuzzy file and symbol finding — and adds it to Emacs. Just adding the mode in Emacs add the familiar ⌘-t shortcut to access this.

4. undo-tree

Undo tree is a great little mode that actually comes bundled with Evil mode (though it is useful outside of there as well). All it does is allow you to visualize the tree history of all your past revisions of a file and easily navigate between them. While this sounds simple, it is an invaluable feature that really takes the stress and cognitive overload out of going back and forth between versions of a file.

Emacs Undo Tree
Undo Tree showing the tree history of an edited file.

5. js2-mode

Emacs has a lot of great language-specific modes, but the one I’m probably most attached to is js2-mode. js2-mode is an advanced JavaScript editing environment that actually uses a port of parts of Mozilla’s Rhino JavaScript engine to parse and evaluate JavaScript files and highlight errors and warnings. Beyond that, the fact that it actually parses the JavaScript code in your buffer opens the door to cool IDE-like refactors. This combo makes for the most killer JavaScript dev environment I have yet to come across.

Js2 Mode in Emacs
Js2 mode showing some common errors and warnings.

Emacs now and always

I never feel the temptation to try new editors like Sublime and Atom because I have reached point of harmony with Emacs. Emacs has the killer combo of three things that I don’t think any other editor has:

  • It’s been around long enough that most pain points I can imagine have been addressed by someone.
  • It has a large and robust user base that’s quick to add extensions for new features/languages/etc. that appear in other editors.
  • It has a full-featured, easy-to-use, and well-documented, built-in extension language that lets me add any code I need to address a missing feature or pain point that does come up.

While most other popular editors have some combination of these 3 things, none of them have reached the “Emacs” level yet in my mind, and until they do, I know which editor I will be sticking with.