Today’s my first day using Emacs at work. I picked a cognitively easy task (HTML markup editing) to practice on. Being somewhat wired up in Vim, I found myself thinking in terms of Vim operations, and trying to replicate it in Emacs. I know it’s not the most orthodox way of learning/doing Emacs, but it was the only way I knew to get started, and it’s helped me cope so far.
Here is my personal Vim to Emacs conversion table. It’s what I’ve been able to pick up and use fairly proficiently so far, in the order that made most sense to me as I picked the tool up.
“-” in the Vim column means I don’t know how it’s done, rather than Vim not being able to perform it. I expect that all these keys would work on a plain vanilla Emacs 23 install with no configuration or extra scripts added on.
You notice that I’ve used ctrl- and alt- notations directly instead of C- and M- which is the Emacs convention. I’ve done so because that’s what the labels say on the keyboard I use. Also, my brain is already bogged down enough making the cognitive leaps from Vim to Emacs, it doesn’t need to be bothered by M- to alt- and C- to ctrl- translations for now. If you’re not happy with it, go make your own list. Apologies to Mac users, you’ll have to think of alt- as your cmd- key.
Here we go.
Moving around
Vim | Emacs | |
Left | h | ctrl-b (back) |
Right | l | ctrl-f (forward) |
Up | j | ctrl-p (previous) |
Down | k | ctrl-n (next) |
Start of Line | ^ | ctrl-a (alpha) |
End of Line | $ | ctrl-e(end) |
Left by a word | w | alt-f (forward, bigger) |
Right by a word | b | alt-b (back, bigger) |
Next paragraph | ctrl-] | alt-e (end of next line) |
Previous paragraph | ctrl-[ | alt-a (alpha of previous line) |
Start of buffer | gg | alt-< |
End of buffer | G | alt-> |
Basic file and program operations
Vim | Emacs | |
Cancel command | esc | ctrl-g |
Open file | :e | ctrl-x ctrl-f |
Save file | :w | ctrl-x ctrl-s |
Quit | :q | ctrl-x ctrl-c |
Making selections
Vim | Emacs | |
Start selection | v | ctrl-space |
Undo, Cut, Copy, Paste, Delete
Vim | Emacs | |
Undo | u | ctrl-_ or ctrl-/ |
Cut | d | ctrl-w |
Copy | y | alt-w |
Paste | p | ctrl-y |
Cycle through previous copies | – | ctrl-y (once) alt-y (to iterate) |
Delete | x | ctrl-d |
Delete word | dw (to clipboard) | alt-d (no clipboard) |
Cut line | dd | ctrl-a ctrl-k |
Copy line | yy | ctrl-a ctrl-space ctrl-e alt-w |
Copy entire buffer | gg v G y | alt-< ctrl-space alt-> alt-w |
Move around with search
Vim | Emacs | |
Search forward | /[search chars] | ctrl-s [search chars] |
Search backwards | ?[search chars] | ctrl-r [search chars] (reverse) |
Next result | n | ctrl-s (after Search forward) |
Previous result | N | ctrl-r (after Search backwards) |
Clear search | :nohlsearch | ret |
Search and replace
Vim | Emacs | |
Whole document | :%s/[search]/[replace]/g | alt-x replace-string ret [search] ret[replace]alt-x replace-regex ret [search] ret [replace] |
Within selection | (make selection):s/[search]/[replace]g | (make selection)alt-x replace-string ret [search] ret [replace]
alt-x replace-regex ret [search] ret [replace] |
Opening new lines
Vim | Emacs | |
Before current line | O | ctrl-a ctrl-o |
After current line | o | ctrl-e ctrl-o |
Buffer splits
Vim | Emacs | |
Split top/bottom | ctrl-w s | ctrl-x 2 |
Split left/right | ctrl-w v | ctrl-x 3 |
Close current split | ctrl-w d | ctrl-x 0 |
Close other splits | ctrl-w o | ctrl-x 1 |
Search backwards in Vim is ?, think shift /
sasha: Thanks for that. I’ll add it to the list.
Important productivity tip: After C-s to search, C-w will increase the search term with the word at point (the cursor).
So often you move to what you want to search for and type C-s C-w C-s to jump to the next occurrence.
Close other splits in Vim with C-w o.
Travis: Thanks. I’ve amended the list.
To copy the entire buffer in Vim, there’s no need to enter visual mode. Just: gg y G.
Rule of thumb: Only use visual mode to link together several movements (for example, gg v G k $ y to copy all but the last line.)
Don’t put too much emphasis on the default keybindings. Emacs is about making it work like you want, so don’t accept everything just because they are default,
For example, for such a frequent operation as opening files it is stupid to use a a complex key sequence like ctrl-x ctrl-f. I use F3 instead, etc
The defaults are only suggestions and some of them are bad suggestions, so feel free to override them aggressively, instead of adapting to them. In Emacs there is no one True Way, everyone should use it the way it’s the best for him or her.
Some comments for emacs:
Select whole buffer: C-x h → Copy whole buffer: C-x h M-w.
You can search a regexp with C-M-s.
Query-replace is bound to M-%. It’s easier to answer ‘!’ to the first query rather than write the full function name. C-M-% for the regexp version.
In emacs, for copying it’s sometimes easier to just kill and yank. For example,
C-S-backspace deletes the whole line. To copy a whole line, just do: C-S-backspace C-y.
M-d deletes a word. To copy a word, do: M-d C-y.
Etc.
Btw, for vim’s ‘o’ you want C-e RET.
C-o leaves the cursor in the original line.