Getting started {.cols-3}
Starting Emacs
To enter Emacs, just type its name:
$ emacs
- | - |
---|---|
C-z | Suspend Emacs |
C-x C-c | Exit Emacs permanently |
{.shortcuts} |
Global Description {.secondary}
- | - |
---|---|
C-<key> | Means hold the control, and press <key> |
M-<key> | Means press the Esc once, and press <key> |
{.shortcuts} |
NOTICE: This cheatsheet follows the above rules.
Motion {.row-span-2}
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) |
{.shortcuts .show-header} |
Case Change
- | - |
---|---|
M-u | Uppercase word |
M-l | Lowercase word |
M-c | Capitalize word |
C-x C-u | Uppercase region |
C-x C-l | Lowercase region |
{.shortcuts} |
Files
- | - |
---|---|
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 |
{.shortcuts} |
Error Recovery
- | - |
---|---|
C-g | Abort partially typed or executing command |
M-x recover-session | Recover files lost by a system crash |
C-x u C-_ C-/ | Undo an unwanted change |
M-x revert-buffer | Restore a buffer to its original contents |
C-l | Redraw garbaged screen |
{.shortcuts} |
Transposing {.row-span-2}
- | - |
---|---|
C-t | Transpose characters |
M-t | Transpose words |
C-x C-t | Transpose lines |
C-M-t | Transpose sexps |
{.shortcuts} |
Scroll
- | - |
---|---|
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 |
{.shortcuts} |
Goto
- | - |
---|---|
M-g g | Goto line |
M-g c | Goto char |
M-m | Back to indentation |
{.shortcuts} |
Marking
- | - |
---|---|
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 |
{.shortcuts} |
Killing and Deleting {.row-span-2}
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 |
{.shortcuts .show-header} |
Killing
- | - |
---|---|
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 |
{.shortcuts} |
Getting Help
- | - |
---|---|
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 |
{.shortcuts} |
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.
Multiple Windows {.col-span-2}
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 |
{.shortcuts}
Formatting
- | - |
---|---|
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 |
{.shortcuts} |
Info {.row-span-2}
- | - |
---|---|
C-h i | Enter the Info documentation reader |
C-h S | Find specified function or variable in Info |
{.shortcuts} |
Moving within a node
- | - |
---|---|
SPC | Scroll forward |
DEL | Scroll reverse |
b | Beginning of node |
{.shortcuts} |
Moving between nodes
- | - |
---|---|
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 |
{.shortcuts} |
Other
- | - |
---|---|
h | Run Info tutorial |
i | Look up a subject in the indices |
s | Search nodes for regexp |
q | Quit Info |
{.shortcuts} |
Minibuffer
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 |
{.shortcuts} |
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.
Tags
- | - |
---|---|
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 |
{.shortcuts} |
Rectangles
- | - |
---|---|
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 |
{.shortcuts} |
Keyboard Macros
- | - |
---|---|
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 |
{.shortcuts} |
Buffers
- | - |
---|---|
C-x b | Select another buffer |
C-x C-b | List all buffers |
C-x k | Kill a buffer |
{.shortcuts} |
Emacs Search{.cols-3}
Regex (common) {.row-span-2}
- | - |
---|---|
. (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 |
Regex (entry)
Start | End | Entity |
---|---|---|
^ | $ | Line |
\< | \> | Word |
\_< | \_> | Symbol |
\‘ | \’ | Buffer |
{.show-header} |
Regex (conflict)
These | Others | class |
---|---|---|
[...] | [^...] | Explicit set |
\w | \W | Word-syntax character |
\sc | \Sc | Character with syntax c |
\cc | \Cc | Character with category c |
{.show-header} |
Incremental Search
- | - |
---|---|
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 |
{.shortcuts} |
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.
Query Replace
- | - |
---|---|
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) |
{.shortcuts} |
Misc
Shells
- | - |
---|---|
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 |
{.shortcuts} |
International Character Sets {.col-span-2}
- | - |
---|---|
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 |
{.shortcuts} |
Registers
- | - |
---|---|
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 |
{.shortcuts} |
Miscellaneous
- | - |
---|---|
C-u num | Numeric argument |
M-- | Negative argument |
C-q char | Quoted insert |
{.shortcuts} |
Commands Dealing with Emacs Lisp
- | - |
---|---|
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 |
{.shortcuts} |
Simple Customization
- | - |
---|---|
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)
Abbrevs
- | - |
---|---|
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 |
{.shortcuts} |
Spelling Check
- | - |
---|---|
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 |
{.shortcuts} |
Writing Commands {.col-span-2}
Syntax
(defun command-name (args)
"documentation" (interactive "template")
body)
Example
(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.