Introduction
I’ve used Emacs for many years.
My fingers knew the native bindings by heart. C-a, C-e, C-k, M-f,
the whole choreography of chords. I never really questioned it.
Then I moved to Doom Emacs.
Doom is built around Evil, the Vim emulation layer. Vim keybindings are the default, on purpose. And the first thing I did was turn them off.
It was pure habit. I had years of native muscle memory and no intention of throwing it away to relearn how to move a cursor.
So for a while I ran Doom the “wrong” way: a Vim-first distribution with Vim disabled.
Later, I changed my mind.
Giving Evil a Real Chance
At some point it felt silly to run Doom against its own grain.
The whole project is designed around Evil. Most of its polish, its defaults, its bindings assume you’re editing the Vim way. By keeping native bindings I was fighting the tool instead of using it.
So I flipped the switch and committed to it.
The beginning was rough.
There’s a whole grammar to learn. Modes. Operators. Motions. Text objects. A language where pressing keys in the wrong order does nothing useful, and where the “obvious” Emacs reflex is suddenly wrong.
For a few days I was slower at everything.
Then, slowly, it started to make sense. And once it did, I kept it. This is still how I edit today.
One thing matters before the bindings, though.
What I switched to isn’t really Evil. It’s Doom in Evil mode, which is a very different, much friendlier thing.
It’s Doom, Not Raw Vim
This distinction took me a while to appreciate.
Evil on its own is the engine: it teaches Emacs to speak Vim. But raw Evil is spartan. Doom wraps it in a coherent set of defaults, a leader key, discoverable menus, and dozens of small integrations that make the modal model pleasant instead of merely functional.
which-key is the clearest example. Start a key sequence, pause, and Doom
shows you every possible continuation in a popup. You’re never stranded
wondering what comes next.
So when I say I switched to Evil, I really mean I switched to Doom’s curated take on it. I don’t think I would have stuck with bare Evil. The polish is what kept me.
The Mental Model That Made It Click
The breakthrough wasn’t memorising bindings.
It was understanding that Vim editing is a small language: a verb, then something to act on.
You combine an operator (the verb) with a motion or a text object (what to act on):
d— deletec— change (delete, then drop into insert mode)y— yank (copy)
And the things to act on:
w— to the next wordiw/aw— “inner word” / “a word” (with surrounding space)i)/a)— inside / around parenthesesip/ap— inside / around a paragraph
Once that clicks, you stop memorising commands and start composing them. dw,
ci), yap — none of these needed to be learned individually. They fall out
of the grammar.
The other revelation was the dot command.
Pressing . repeats your last change. Edit one word, jump to the next
occurrence, press ., and you’ve made the same edit again. It sounds trivial.
It’s one of the things I’d miss the most.
The Editing Bindings I Reach For Daily
These are the ones that earned a permanent place in my hands.
Acting on the word under the cursor:
daw— delete a word (and its surrounding space)caw— change a word (delete it and land in insert mode)diw— delete the inner word, leaving the spacesciw— change the whole inner wordcw— change from the cursor to the end of the word
Working with indentation, which is wonderful in indentation-heavy languages:
dii— delete everything at the current indentation levelcii— change that whole block
Doom ships the indentation text object (ii / ai), so these compose just
like the word objects.
Commenting:
gcc— toggle the comment on the current linegc+ a motion — comment a region, e.g.gcapto comment a paragraph
And for shuffling things around, there’s a surprising amount you can do with
operators and the p (paste) register. The Vim wiki has a
good reference on swapping characters, words and lines
that I still go back to.
Getting Around
Motion is where the modal model really pays off, because once you’re in normal mode the whole keyboard is navigation.
Jumping to a line is just the line number followed by G:
30G
That puts the cursor on line 30. (:30 followed by Enter does the same.)
Within a line, f and t are indispensable:
f(— jump forward to the next(t(— jump just before it;and,— repeat that jump forward and backward
But the binding that genuinely changed how I move is Doom’s avy integration,
hiding under the gs prefix:
gss— type a couple of characters and jump to anything visible on screengsj/gsk— jump visually to a line below / abovegs SPC— jump to any character, anywhere in the buffer
After a while, reaching for the mouse or hammering arrow keys feels slow.
For code, Doom’s LSP layer adds the usual suspects:
gd— go to definitiongr— find referencesK— show documentation for the symbol under the cursor
Doom’s Polish: The Leader Key
This is the part that has very little to do with Vim, and everything to do with why Doom is comfortable.
Almost every non-editing action lives under the SPC leader key:
SPC f f— find a fileSPC b b— switch bufferSPC p p— switch projectSPC w— window managementSPC s— search (in buffer, project, etc.)SPC g g— open MagitSPC :— run a command (the oldM-x)
Because of which-key, I never had to memorise these up front. I’d press
SPC, read the menu, and drill down. The bindings stuck on their own through
repetition.
And when I want to know what a key does in the current mode, the bindings help
is right there under SPC h b — a searchable list of everything currently
bound. It’s how I discovered half of what I now use.
What I Didn’t Fully Convert
I’m not a purist about any of this.
A few Emacs reflexes survived the switch, simply because my fingers refused to let them go.
The big one is C-g. It’s my universal “get me out of here”, and it works
everywhere in Doom, so I never replaced it. Leaving insert mode is the clearest
case: I still do it three different ways depending on where my hands are —
Esc, jk, or C-g. I never forced myself to settle on one.
In insert mode I also kept C-a and C-e to jump to the start and end of the
line. That’s an Emacs-ism rather than a Vim one — Doom keeps those motions
alive in insert state — and it’s so wired into my hands that switching to a
normal-mode motion just to reach the end of a line never felt worth it.
And every so often I still reach for M-x instead of SPC : to run a command.
Old habits.
On top of that I keep a handful of small custom bindings, and they fall into two telling camps.
Some of them duplicate what Evil already does. I bound my own commands to
duplicate a line and to change the case of a word, even though Evil has
perfectly good answers — yyp to duplicate a line, gUiw / guiw to upper-
or lower-case a word. I kept the Emacs versions purely out of reflex.
Others have no Vim equivalent at all, and those I would never give up. Narrowing is the clearest example: focusing the buffer on a single region or function is a pure Emacs power, so I gave it a proper home under the leader.
(map! :leader
:desc "Narrow to region" "n r" #'narrow-to-region
:desc "Narrow to defun" "n f" #'narrow-to-defun
:desc "Widen" "n w" #'widen)
That’s the honest part of the story. I didn’t replace one orthodoxy with another. I took Doom’s Evil as a strong default and bent the last few percent to fit my hands.
If anything, that’s the lesson: the goal isn’t to edit like Vim, or like Emacs. It’s to edit like you, on top of sane defaults.
Resources
A few things that helped me far more than any single cheat sheet:
- Noel Welsh — Doom Emacs Workflows covers the basics of finding text, moving text, workspaces and multiple cursors really well.
- niyumard/Doom-Emacs-Cheat-Sheet for a quick binding reference.
- The built-in
SPC h bbindings help, which is the resource you’ll actually reach for once you’re inside Doom.
Was It Worth It?
Yes — with an asterisk.
It was worth it because, after the rough first days, modal editing genuinely made me faster: the verb-plus-object grammar turns most common edits into a couple of deliberate keystrokes.
The asterisk is that “switching to Evil” undersells what actually happened. I didn’t move to Vim. I moved to Doom, resisted its way of working for a while, then finally let it do what it was built to do.
The grammar fought me. Then it made sense. And it stuck.
Share on
Twitter Facebook LinkedInHave comments or want to discuss this topic?
Send an email to ~bounga/public-inbox@lists.sr.ht