Emacs is the extensible, customizable, self-documenting real time display text editor. This reference was made for Emacs 27.
To enter Emacs, just type its name:
$ emacs
| - | - | 
|---|---|
C-z | 
Suspend Emacs | 
C-x C-c | 
Exit Emacs permanently | 
| - | - | 
|---|---|
C-<key> | 
Means hold the control, and press <key> | 
M-<key> | 
Means press the Esc once, and press <key> | 
NOTICE: This cheatsheet follows the above rules.
| Backward | Forward | Entity to move over | 
|---|---|---|
C-b | 
C-f | 
Haracter | 
M-b | 
M-f | 
Word | 
C-p | 
C-n | 
Line | 
C-a | 
C-e | 
Line beginning (or end)  | 
M-a | 
M-e | 
Sentence | 
M-{ | 
M-} | 
Paragraph | 
C-x [ | 
C-x ] | 
Page | 
C-M-b | 
C-M-f | 
Sexp | 
C-M-a | 
C-M-e | 
Function | 
M-< | 
M-> | 
Buffer beginning (or end)  | 
| - | - | 
|---|---|
M-u | 
Uppercase word | 
M-l | 
Lowercase word | 
M-c | 
Capitalize word | 
C-x C-u | 
Uppercase region | 
C-x C-l | 
Lowercase region | 
| - | - | 
|---|---|
C-x C-f | 
Read a file into Emacs | 
C-x C-s | 
Save a file back to disk | 
C-x s | 
Save all files | 
C-x i | 
Insert contents of another file into this buffer | 
C-x C-v | 
Replace this file with your file | 
C-x C-w | 
Write buffer to a specified file | 
C-x C-q | 
Toggle read-only status of buffer | 
| - | - | 
|---|---|
C-g | 
Abort partially typed or executing command | 
M-x recover-session | 
Recover files lost by a system crash | 
C-x uC-_C-/ | 
Undo an unwanted change | 
M-x revert-buffer | 
Restore a buffer to its original contents | 
C-l | 
Redraw garbaged screen | 
| - | - | 
|---|---|
C-t | 
Transpose characters | 
M-t | 
Transpose words | 
C-x C-t | 
Transpose lines | 
C-M-t | 
Transpose sexps | 
| - | - | 
|---|---|
C-v | 
Scroll to next screen | 
M-v | 
Scroll to previous screen | 
C-x < | 
Scroll left | 
C-x > | 
Scroll right | 
C-l | 
Scroll current line to  center, top, bottom  | 
| - | - | 
|---|---|
M-g g | 
Goto line | 
M-g c | 
Goto char | 
M-m | 
Back to indentation | 
| - | - | 
|---|---|
C-@C-SPC | 
Uet mark here | 
C-x C-x | 
Exchange point and mark | 
M-@ | 
Set mark arg words away | 
M-h | 
Mark paragraph | 
C-x C-p | 
Mark page | 
C-M-@ | 
Mark sexp | 
C-M-h | 
Mark function | 
C-x h | 
Mark entire buffer | 
| Backward | Forward | Entity to kill | 
|---|---|---|
DEL | 
C-d | 
Character  (delete)  | 
M-DEL | 
M-d | 
Word | 
M-0 C-k | 
C-k | 
Line  (to end of)  | 
C-x DEL | 
M-k | 
Sentence | 
M-- C-M-k | 
C-M-k | 
Sexp | 
| - | - | 
|---|---|
C-W | 
Kill region C-w | 
M-w | 
Copy region to kill ring | 
M-z char | 
Kill through next occurrence of char | 
C-y | 
Yank back last thing killed | 
M-y | 
Replace last yank with previous kill | 
| - | - | 
|---|---|
C-x 1 | 
Remove help window | 
C-M-v | 
Scroll help window | 
C-h a | 
Apropos: show commands matching a string | 
C-h k | 
Describe the function a key runs | 
C-h f | 
Describe a function | 
C-h m | 
Get mode-specific information | 
The help system is simple. Type C-h (or F1) and follow the directions. If you are a first-time user, type C-h t for a tutorial.
When two commands are shown, the second is a similar command for a frame instead of a window.
| - | - | - | 
|---|---|---|
C-x 5 1 | 
C-x 1 | 
Delete all other windows | 
C-x 5 2 | 
C-x 2 | 
Split window, above and below | 
C-x 5 0 | 
C-x 0 | 
Delete this window | 
C-x 3 | 
Split window, side by side | |
C-M-v | 
Scroll other window | |
C-x 5 o | 
C-x o | 
Switch cursor to another window | 
C-x 5 b | 
C-x 4 b | 
Select buffer in other window | 
C-x 5 C-o | 
C-x 4 C-o | 
Display buffer in other window | 
C-x 5 f | 
C-x 4 f | 
Find file in other window | 
C-x 5 r | 
C-x 4 r | 
Find file read-only in other window | 
C-x 5 d | 
C-x 4 d | 
Run Dired in other window | 
C-x 5 . | 
C-x 4 . | 
Find tag in other window | 
C-x ^ | 
Grow window taller | |
C-x { | 
Shrink window narrower | |
C-x } | 
Grow window wider | |
| - | - | 
|---|---|
TAB | 
Indent current line (mode-dependent) | 
C-M-\ | 
Indent region (mode-dependent) | 
C-M-q | 
Indent sexp (mode-dependent) | 
C-x TAB | 
Indent region rigidly arg columns | 
M-; | 
Indent for comment | 
C-o | 
Insert newline after point | 
C-M-o | 
Move rest of line vertically down | 
C-x C-o | 
Delete blank lines around point | 
M-^ | 
Join line with previous (with arg, next) | 
M-\ | 
Delete all white space around point | 
M-SPC | 
Put exactly one space at point | 
M-q | 
Fill paragraph | 
C-x f | 
Set fill column to arg | 
C-x . | 
Set prefix each line starts with | 
M-o | 
Set face | 
| - | - | 
|---|---|
C-h i | 
Enter the Info documentation reader | 
C-h S | 
Find specified function or variable in Info | 
| - | - | 
|---|---|
SPC | 
Scroll forward | 
DEL | 
Scroll reverse | 
b | 
Beginning of node | 
| - | - | 
|---|---|
n | 
Next node | 
p | 
Previous node | 
u | 
Move up | 
m | 
Select menu item by name | 
n | 
Select nth menu item by number (1–9) | 
f | 
Follow cross reference (return with l) | 
l | 
Return to last node you saw | 
d | 
Return to directory node | 
t | 
Go to top node of Info file | 
g | 
Go to any node by name | 
| - | - | 
|---|---|
h | 
Run Info tutorial | 
i | 
Look up a subject in the indices | 
s | 
Search nodes for regexp | 
q | 
Quit Info | 
The following keys are defined in the minibuffer.
| - | - | 
|---|---|
TAB | 
Complete as much as possible | 
SPC | 
Complete up to one word | 
RET | 
Complete and execute | 
? | 
Show possible completions | 
M-p | 
Fetch previous minibuffer input | 
M-n | 
Fetch later minibuffer input or default | 
M-r | 
Regexp search backward through history | 
M-s | 
Regexp search forward through history | 
C-g | 
Abort command | 
Type C-x ESC ESC to edit and repeat the last command that used the minibuffer. Type F10 to activate menu bar items on text terminals.
| - | - | 
|---|---|
M-. | 
Find a tag (a definition) | 
C-u M-. | 
Find next occurrence of tag | 
M-x visit-tags-table | 
Specify a new tags file | 
M-x tags-search | 
Regexp search on all files in tags table | 
M-x tags-query-replace | 
Run query-replace on all the files | 
M-, | 
Continue last tags search or query-replace | 
| - | - | 
|---|---|
C-x r r | 
Copy rectangle to register | 
C-x r k | 
Kill rectangle | 
C-x r y | 
Yank rectangle | 
C-x r o | 
Open rectangle, shifting text right | 
C-x r c | 
Blank out rectangle | 
C-x r t | 
Prefix each line with a string | 
| - | - | 
|---|---|
C-x ( | 
Start defining a keyboard macro | 
C-x ) | 
End keyboard macro definition | 
C-x e | 
Execute last-defined keyboard macro | 
C-u C-x ( | 
Append to last keyboard macro | 
M-x name-last-kbd-macro | 
Name last keyboard macro | 
M-x insert-kbd-macro | 
Insert Lisp definition in buffer | 
| - | - | 
|---|---|
C-x b | 
Select another buffer | 
C-x C-b | 
List all buffers | 
C-x k | 
Kill a buffer | 
| - | - | 
|---|---|
. (dot) | 
Any single character except a newline | 
* | 
Zero or more repeats | 
+ | 
One or more repeats | 
? | 
Zero or one repeat | 
\ | 
Quote special characters | 
\c | 
Quote regular expression special character c | 
\| | 
Alternative (“or”) | 
\(...\) | 
Grouping | 
\(:?...\) | 
Shy grouping | 
\(:NUM...\) | 
Explicit numbered grouping | 
\n | 
Same text as nth group | 
\b | 
At word break | 
\B | 
Not at word break | 
| Start | End | Entity | 
|---|---|---|
^ | 
$ | 
Line | 
\< | 
\> | 
Word | 
\_< | 
\_> | 
Symbol | 
\‘ | 
\’ | 
Buffer | 
| These | Others | class | 
|---|---|---|
[...] | 
[^...] | 
Explicit set | 
\w | 
\W | 
Word-syntax character | 
\sc | 
\Sc | 
Character with syntax c | 
\cc | 
\Cc | 
Character with category c | 
| - | - | 
|---|---|
C-s | 
Search forward | 
C-r | 
Search backward | 
C-M-s | 
Regular expression search | 
C-M-r | 
Reverse regular expression search | 
M-p | 
Select previous search string | 
M-n | 
Select next later search string | 
RET | 
Exit incremental search | 
DEL | 
Undo effect of last character | 
C-g | 
Abort current search | 
Use C-s or C-r again to repeat the search in either direction. If Emacs is still searching, C-g cancels only the part not matched.
| - | - | 
|---|---|
M-% | 
Interactively replace a text string | 
M-x regexp | 
Using regular expressions | 
SPC / y | 
Replace this one, go on to next | 
, | 
Replace this one, don’t move | 
DEL / n | 
Skip to next without replacing | 
! | 
Replace all remaining matches | 
^ | 
Back up to the previous match | 
RET | 
Exit query-replace | 
C-r | 
Enter recursive edit (C-M-c to exit) | 
| - | - | 
|---|---|
M-! | 
Execute a shell command | 
M-& | 
Execute a shell command asynchronously | 
M- | 
Run a shell command on the region | 
C-u M- | 
Filter region through a shell command | 
M-x shell | 
Start a shell in window shell | 
| - | - | 
|---|---|
C-x RET l | 
specify principal language | 
M-x list-input-methods | 
show all input methods | 
C-\ | 
enable or disable input method | 
C-x RET c | 
set coding system for next command | 
M-x list-coding-systems | 
show all coding systems | 
M-x prefer-coding-system | 
choose preferred coding system | 
| - | - | 
|---|---|
C-x r s | 
Save region in register | 
C-x r i | 
Insert register contents into buffer | 
C-x r SPC | 
Save value of point in register | 
C-x r j | 
Jump to point saved in register | 
| - | - | 
|---|---|
C-u num | 
Numeric argument | 
M-- | 
Negative argument | 
C-q char | 
Quoted insert | 
| - | - | 
|---|---|
C-x C-e | 
Eval sexp before point | 
C-M-x | 
Eval current defun | 
M-x eval-region | 
Eval region | 
M-: | 
Read and eval minibuffer | 
M-x load-library | 
Load a Lisp library from load-path | 
| - | - | 
|---|---|
M-x customize | 
customize variables and faces | 
Making global key bindings in Emacs Lisp:
(global-set-key (kbd "C-c g") ’search-forward)
(global-set-key (kbd "M-#") ’query-replace-regexp)
| - | - | 
|---|---|
C-x a g | 
Add global abbrev | 
C-x a l | 
Add mode-local abbrev | 
C-x a i g | 
Add global expansion for this abbrev | 
C-x a i l | 
Add mode-local expansion for this abbrev | 
C-x a e | 
Explicitly expand abbrev | 
M-/ | 
Expand previous word dynamically | 
| - | - | 
|---|---|
M-$ | 
Check spelling of current word | 
M-x ispell-region | 
Check spelling of all words in region | 
M-x ispell-buffer | 
Check spelling of entire buffer | 
M-x flyspell-mode | 
Toggle on-the-fly spell checking | 
(defun command-name (args)
"documentation" (interactive "template")
body)
(defun this-line-to-top-of-window (line)
    "Reposition current line to top of window.
With prefix argument LINE, put point on LINE."
    (interactive "P")
    (recenter (if (null line)
                  0
              (prefix-numeric-value line))))
The interactive spec says how to read arguments interactively. Type C-h f interactive RET for more details.