Skip to main content

Getting started with powerful abstract tools: Emacs, Vim

Foundation: Text Editors

In his book The Dip, Seth Godin talks about snowboarding:

Snowboarding is a hip sport. It’s fast, exciting and reasonably priced; and it makes you look very cool. So why are there so few snowboarders? Because learning the basic skills constitutes a painful Dip. It takes a few days to get the hang of it, and, during those few days, you’ll get pretty banged up. It’s easier to quit than it is to keep going.

The brave thing to do is to tough it out and end up on the other side–getting all the benefits that come from scarcity. The mature thing to do is not even to bother starting to snowboard because you’re probably not going to make it through the Dip. And the stupid thing to do is to start, give it your best shot, waste a lot of time and money, and quit right in the middle of the Dip.

In the programming world, editors are an important basic skill-they are like the snowboard in this analogy. I would often read about vim and emacs. In college, I tried them a couple of times and got stuck. vim's swap file prompt was scary. When git opened vim's side-by-side buffer to resolve merge conflicts, I would start sweating.

Finding the Spark

Both VIM and Emacs are powerful and ubiquitous text editors and both are infamous for their steep learning curves. On my own, picking up such a tool was intimidating and frustrating. Here is what did the trick for me: watch a power user use them. It really hits you when this happens in person. I saw someone using org-mode in emacs, its table editor, exporting it in Markdown, HTML, and PDF, and then he used it to create a presentation using org-reveal, I was blown away 🤯. Later another friend of mine was using emacs and tramp to make code adjustments on a live server (avoid doing that) 🫡. During another pairing session, my colleague was using vim, navigating code, renaming variables with visual mode, and running macros-it was magic 🤹🏽. These moments made these editors cool for me-simple yet very pliable and that gave me enough escape velocity to push through the steep learning curve.

The Learning Curve

These editors are abstract tools that carry certain labels: "hard", "for smart people only", "set in their own ways". I struggled with two things when trying to pick them up. When I was working on a problem, I didn't want to get distracted by my editor, its mode, buffers, opening and closing etc. Second, I didn't consider myself smart and I kept my distance (thinking I was being mature) from tools that carried that impression.

But once I realized editors were a fundamental skill, I realized I should invest the time, don't make it (the editor) the last thing. I kept retrying, just like how I would approach a boss fight in a game. I didn't scare that easy in the next round, I noticed patterns, found my corner, got comfortable and started attacking. It grew on me. I acquired the taste. The same approach works for all crafts. Later, as I worked on new problem, these editors didn't get in the way-they provided the structure that will helped me focus.

I was lucky to work with such power users, and they allowed me the space to ask stupid questions. I still nag them about their setup when we meet in person. I use Emacs. I can't program without org-mode, magit, tramp et al. I am slowly working my way through its LSP support and configuring and tweaking things, one language at a time. I've tried other editors, I kept looking for these features and so far my attempts to install plugins/addons haven't worked. I keep returning to Emacs. As the landscape evolves with AI agents and MCP, I will explore whether I can integrate them with Emacs or if I'll need to adopt a more contemporary editor.