Spacemacs cheetsheet March 2022
Table of Contents
- 1. Use mirrors in China
- 2. Visual selection
- 3. Editing
- 4. Navigation
- 5. Narrowing
- 6. Toggle Themes
- 7. Multi edit
- 8. iedit
- 9. Kill ring
- 10. Magit, git
- 11. Files
- 12. Treemacs
- 13. Ranger
- 14. Buffers
- 15. Layout
- 16. Bookmarks
- 17. Searching
- 18. Undo tree
- 19. Spacemacs Clojure mode key bindings
- 20. Snippet
- 21. Zoom / Adjust font size
- 22. Org mode
- 23. Journal mode
- 24. EasyPG Assistant
- 25. Macro
- 26. Project
- 27. Window management
- 28. Toggle Emacs keybindings
- 29. Flycheck errors
- 30. Flutter
- 31. Rust
- 32. Python
- 33. JavaScript
- 34. Graphviz
- 35. Add your own layer
Taken from: inflambda.tech
1. Use mirrors in China
For users in China, use a mirror for spacemacs, this will save a lot time
downloading packages. Locate configuration-layer-elpa-archives in
~/.spacemacs.d/init.el and edit as follows:
(setq configuration-layer-elpa-archives '(("melpa-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/") ("org-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/") ("gnu-cn" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")))
2. Visual selection
| Key(s) | Action |
|---|---|
| v | Start visual selection, then use navigation keys to select region |
| V | Start visual selection by entire line(s) |
| SPC v | Start visual selection starting from current word, then use v / V to widen / narrow search. |
3. Editing
3.1. General Editing
| Key(s) Action | |
|---|---|
| I | Edit from start of line |
| A | Edit from end of line |
| i | Edit before current character |
| a | Edit after current character |
| o | Edit by starting a new line below |
| O | Edit by starting a new line above |
| c w | Change current world |
| 4 c w | Change 4 words starting from current word |
| v c | Change current character |
| SPC v c | Change current word |
| SPC v d | Delete current word |
| C | Change till the end of current line |
| D | Delete till the end of current line |
| x p | Transpose current character with next |
| SPC x t c | Transpose current character with previous |
| SPC x t w | Transpose current word with previous |
| SPC x t l | Transpose current line with previous |
| SPC S c | Spell check and change current word |
| z = | Spell check and change all occurrences of current word |
| SPC j = | Indent region or buffer |
| SPC { d } | Kill paragraph |
| C-R " | Paste from register in edit mode |
| M-q | Wrap line (This is hard wrap, for soft wrap use SPC t j) |
3.2. Programmer Editing
| Key(s) | Action |
|---|---|
| d a b | Delete current s-expression |
| d i b | Delete the contents of current s-expression |
| c a b | Change current s-expression |
| c i b | Change the contents of current s-expression |
| y a b | Copy current s-expression |
| y i b | Copy the contents of current s-expression |
| SPC k t | Transpose current s-expression with previous |
| g c c | Comment current line |
| M-; | Add comment to the end of line |
| % | Jump to matching brackets |
| C-k | sp-kill-hybird-sexp, kill line respecting pair delimiters. Key biding works in normal modes in some major modes |
4. Navigation
| Key(s) | Action |
|---|---|
| 0 | Go to start of line |
| ^ | Go to first non-whitespace character in current line |
| e | End of world without trailing white space |
| w | End of word with trailing white space |
| f/ | Go forward to the first occurrence of / |
| M | Go to middle of buffer |
| H | Go to head of buffer |
| C-u | Go up half a page |
| C-d | Go down half a page |
| SPC j i | List of functions/items in current buffer |
| g d | Goto definition |
| C-o | Go back |
| C-i | Go forward (Reverse of C-o) |
| g ; | Go to position of last edit |
| m a | Add a named marker a |
| ` a | Go to mark a |
| ' a | Go to the line with mark a |
| :marks | List all marks |
| ' ' | Go to last place |
| SPC j j | Jump by character |
| SPC j l | Jump by line |
| C-y | scroll down without moving cursor |
| C-e | Scroll up without moving cursor |
| z t | Put current line to top of buffer |
| z b | Put current line to bottom of buffer |
| z z | Put current line to center of buffer |
| 8 G | Go to line by number |
| z c | Fold current block |
| z o | Unfold/Expand current block |
| SPC t l | Toggle line wrap, similar to soft wrap seen in other editors |
| SPC t n v | Toggle line numbers |
5. Narrowing
Narrowing is very useful to many occasions, e.g., limiting search/replace region, or focusing on function or block.
| Key(s) | Action |
|---|---|
| SPC n f | Narrow to function/block |
| SPC n r | Narrow to select region |
| SPC n w | Widen, use this to undo narrowing |
6. Toggle Themes
You can edit themes by editing the values of dotspacemacs-themes in spacemacs configuration file (SPC f e d), when emacs starts it will use the first theme as default theme. A list of themes can be found at emacs-theme-gallery and Spacemacs ThemesSpacemacs Themes. My current favorite dark theme is cyberpunk. | |
| Key(s) | Action |
|---|---|
| SPC T n | Switch to next theme and open themes transition state, use n/p to preview next/previous theme. |
7. Multi edit
Evil multi-cursor (evil-mc) mode
Use visual selection to select world(s), then use C-p or C-n to select
occurrences above or below, then enter edit mode to edit multiple occurrences,
or use g r q to quit multi-edit mode, or use g r p or g r n to exclude
previous or next occurrence
8. iedit
| Key(s) | Action |
|---|---|
| SPC s e | Edit all occurrence of the word under cursor. |
Spacemacs will display the number of occurrences in the status bar. Use ESC to quit.
9. Kill ring
| Key(s) | Action |
|---|---|
| SPC r y | Show kill ring (helm-show-kill-ring), i.e., list of copy/paste history |
10. Magit, git
| Key(s) | Action |
|---|---|
| SPC g s | Show git status |
| s | Add the highlighted file to staging |
| c c | Create a commit, edit commit message. Use , , to submit commit or use , k to cancel the commit. |
| q | Close magit window |
11. Files
| Key(s) | Action |
|---|---|
| SPC f f | Find file, use C-h to go to parent directory |
| SPC p f | Find file in current project |
| SPC p k | Kill project |
| SPC f e d | Open spacemacs configuration file |
| SPC f e R | Reload spacemacs configuration file |
12. Treemacs
treemacs is for viewing and navigating project files.
| Key(s) | Action |
|---|---|
| SPC f t | Open treemacs buffer. Type ? for more key bindings. |
| SPC p t | Open project root in treemacs buffer |
| C-c C-p d | Remove a project from treemacs buffer |
| SPC 0 | If in file buffer, switch to treemacs buffer |
13. Ranger
ranger is a file manager in emacs.
| Key(s) | Action |
|---|---|
| SPC a t r r | Open ranger buffer |
| h | Go to parent directory |
| l | Jump to selected item |
| y y | Copy file |
| p p | Paste file |
| f | Search by file name |
14. Buffers
| Key(s) | Action |
|---|---|
| SPC b b | List buffers for current layout. (See the remarks below.) |
| SPC b B | List buffers for all layouts. (See the remarks below.) |
| SPC b . | Start buffer transition state. You can then use n, p etc to switch to other buffers b. |
| SPC TAB | Toggle buffer |
| SPC b d | Kill this buffer |
| SPC b n | Go to next buffer |
| SPC b p | Go to previous buffer |
| SPC b s | Go to scratch buffer |
| SPC b Y | Copy current buffer |
| SPC f c | Save current buffer as a new file |
| SPC b w | Toggle buffer as read-only |
| SPC f s | Save current buffer |
| SPC f S | Save all buffers |
| SPC f R | Change file name of current buffer |
| SPC f y | n Copy file name of current buffer |
| SPC b u | Reopen last killed buffer |
| SPC b C-d | Kill other buffers |
14.1. Remarks
Use M-SPC to enter helm transition state, then you can mark buffer(s) use t
and kill the marked buffer(s) with M-D.
15. Layout
Layout is also known as perspective in spacemacs, a layout contains a list of buffers. When spacemacs is started, the default layout is Global
| Key(s) | Action |
|---|---|
| SPC l l | List all layouts |
| SPC l s | Save current layout to a file |
| SPC l L | Load layout from file |
| SPC l x | Kill current layout with all buffers |
16. Bookmarks
It's an easy way to pause and resume editing a file. The bookmark feature is like a light version of layout.
| Key(s) | Command Action |
|---|---|
| C-x r m bookmark-set | Create a named bookmark |
| C-x r b bookmark-jump | Open a saved bookmark |
17. Searching
| Key(s) | Action |
|---|---|
| SPC s s | Search with helm-swoop in current buffer |
| SPC s S | Search with helm-swoop in current buffer for current word |
| SPC s p | Search with helm-swoop in current project |
| SPC r l | Resume last search (helm-resume) |
| SPC s l | Repeat last search (for project search only) |
| SPC p % | Regex replace in all file in project, type ? for help |
| * | Search forward for the word under cursor. Use n or p to go to next or previous match. You can also start iedit from here. |
| # | Search backward for the word under cursor. Use n or p to go to next or previous match. You can also start iedit from here. |
| SPC s c | Clear search highlights |
If you have ripgrep installed, you can use ripgrep arguments as the search pattern. Example patterns for search the term bql in different files:
Search only in Java files:
-g*.java bql // Or use `-t` flag: -tjava bql
Search in any files except Java files:
-g!*.java bql
Show 2 lines above and below the occurrence, this works in project search only:
-C2 bql
Search and replace
After doing search and helm buffered displayed, press C-c C-e, you can then
edit the results in a new buffer as if it's a new file, e.g., you can use SPC s e
to replace all occurrences.
18. Undo tree
| Key(s) | Action |
|---|---|
| SPC a u | Show undo tree. Use j, k, h, l to select from the edit history. |
19. Spacemacs Clojure mode key bindings
| Key(s) | Action |
|---|---|
| , ' | Run Clojure REPL (sesman-start) |
| , e f | Evaluate current s-expression and show result |
| , s f | Send current s-expression to REPL and evaluate |
| , e v | Evaluate expression before point (cider-eval-sexp-at-point) |
| , e l | Evaluate expression at current line |
| , s b | Reload current buffer (cider-load-buffer) |
| , e b | Evaluate current buffer |
| , s a | Toggle between REPL and Clojure source code |
| , s n | Change REPL namespace to current buffer |
| , s l | Clear REPL |
| , m q | q Quit REPL |
| , m q r | Restart REPL (sesman-restart) |
| , h h | Show doc |
| , e ; | Evaluate current s-expression and print result as comment in a new line |
| , e w | Evaluate last s-expression and replace the expression with the result |
| , e p f | Evaluate current s-expression and pretty-print result in a new buffer |
| , e b | Evaluate all code in buffer |
| , t a | Run all tests |
| , m b | Browse active REPLs (sesman-browse) |
| , e e | Evaluate expression before cursor |
| , e w | Evaluate expression and replace by the results |
| , e m | Macro-expand for immediate macro |
| , e M | Macro-expand for all nested macros |
| , T e | Toggle enlighten mode with cider inspector |
| , d v | Inspect current symbol |
| , h a | cider-apropos, show list of Clojure symbols |
| , g r | Find reference to the symbol under cursor |
Use SPC v followed by v or V to expand or shrink expression selection.
When in Clojure REPL buffer, the following keybinding are available:
| Key(s) | Action |
|---|---|
| C-j | Cycle up through history |
| C-k | Cycle down through history |
| , | Open mini buffer showing cider commands. For instance, you can use clear command to clear REPL buffer. |
19.1. Lisp state
Lisp State is for easy navigating and editing s-expressions in Clojure mode. | |
| Key(s) | Action |
|---|---|
| SPC k . | Toggle list-state. When lisp-state is on, the status mode indicator is shown as L. |
Key bindings in lisp state:
For a complete list of key bindings, see lisp-state
Lisp state uses a different set of keybindings, to switch back to normal state,
press the ESC key.
After calling a Lisp state function, the buffer enters Lisp state, lisp state
functions can be triggered without the SPC k prefix.
| Key(s) | Action |
|---|---|
| SPC k . | Start lisp state |
| L | Next expression |
| H | Previous expression |
| SPC k w | Wrap expression with parenthesis |
| SPC k W | Unwrap expression |
| SPC k y | Copy expression |
| SPC k y | Copy expression |
| SPC k s | Forward slurp expression (move inside the expression after the current s-expression ) |
| SPC k d | x Delete s-expression |
| M-t | Transpose current s-expression with previous |
20. Snippet
To use an existing snippets,
Type the keyword defined in the snippet
Use M-/ to expand with snippet
Use TAB to jump to other makers in the snippet
Sinppets are saved in ~/.spacemacs.d/snippets/ or
~/.emacs.d/private/snippets/ directories.
List of snippets can be found with the yas-visit-snippet-file command.
Every snippet is a single file under a directory named with its target major mode.
A example snippet at ~/.spacemacs.d/snippets/org-mode/journal-entry is shown
below, you type journal-entry to trigger the snippet and everything below # –
will be inserted in place for you.
Note: $0 indicates the end cursor position, while $1, $2 etc indicates the initial and second positions.
# -*- mode: snippet -*- #name : journal-entry #key : journal-entry #contributor : jr0cket # -- * 201912$1 ** Thoughts for today $0 ** Code commits *** . ** Activities in detail *** .
21. Zoom / Adjust font size
| Key(s) | Action |
|---|---|
| SPC z f | Show mini buffer to adjust font size |
22. Org mode
| Key(s) | Action |
|---|---|
| SPC a o o n | List all agenda and todos |
| g r | In org-agenda buffer, refresh agenda |
| C-c [ | org-agenda-file-to-front, add this file to agenda list |
| t | Toggle ToDo state selector |
| , b d | Create a code block |
| , d d | Create deadline for the current task |
| , d s | Schedule the start date for the current task |
| , i b | Create a template block, it's more general than , b d |
| , T c | Toggle check box (a check box is simply a pair of brackets: [ ]) |
| M-Left | Promote headings |
| M-Right | Demote headings |
| M-S-Left | Promote headings with all its sub-items |
| M-S-Right | Demote headings with all its sub-items |
| , i l | Insert a link |
| , i L | Insert a link, auto extract link title from the link |
| SPC a o l | Store a link target (org-store-link), use , i l to insert the link |
| , d d | Add deadline/schedule a task |
| , s A | org-archive-subtree, move current node to the archive file |
| , C p | org-pomodoro |
| , s S | Sort subtree |
| , s n | Narrow to subtree, use this to narrow buffer to current org subtree |
| , s w | Widen, this is the opposite of , s n |
| C-c @ | org-mark-subtree, select subtree |
| C-c C-x C-c | org-columns view, press q to quit column view |
| SPC a o C i | org-clock-in |
| SPC a o C o | org-clock-out |
| SPC a o C g | org-clock-goto, goto the active task |
If you have source code in an org file, it can be slow to open this file caused by source code evaluation. Disable code eval by adding this header argument: #+PROPERTY: header-args :eval no. See source.
23. Journal mode
| Key(s) | Action |
|---|---|
| SPC a o j j | Create a new journal for current day |
| , p | Previous journal |
| , n | Next journal |
24. EasyPG Assistant
You can encrypt or decrypt files with epa- commands, some are listed below.
| Command | Action |
|---|---|
| epa-list-key | List all GPG keys |
| epa-encrypt-file | Encrypt a file with GPG key. Use symmetric encryption if no key is selected. |
| epa-decrypt-file | Decrypt a file. Emacs will cache password so you may not be asked to enter password for the file encrypted a short time ago. |
25. Macro
Macro in emacs means a sequence of actions usually edits. You can use macro to simplify repetitive tasks.
To define and use a macro:
Press q q to start macro definition, all actions afterwards will be recorded.
Perform the editing actions you'd like to record.
Press q to complete the macro definition.
Press C-x e to execute this macro.
Press e to repeat this macro.
Press ESC to quit macro execution.
If you'd like to execute this macro multiple times, you can always use the
number prefix trick. For example pressing 5 C-x e will execute the macro 5
times.
26. Project
| Key(s) | Action |
|---|---|
| SPC p t | Show project tree. Press the enter key to open the file. SPC 0 to go back to project tree. Press q to quit project tree |
| SPC p a | Toggle between source code and test file |
27. Window management
The emacs window can be split in to multiple windows.
Press SPC w and some common window-related commands will be displayed in the
mini-buffer.
| Key(s) | Action |
|---|---|
| SPC w . | Enter window-transition-state, where you can select/move/resize windows |
| SPC w d | Delete current window |
| SPC w / | Split window horizontally |
| SPC w V | Split window horizontally and focus the new window |
| SPC w [ | Resize current window |
| SPC w s | Split window vertically |
| SPC w S | Split window vertically and focus the new window |
| SPC t g | Toggle window size golden ratio |
28. Toggle Emacs keybindings
You can use C-z to toggle between the default Evil mode and Emacs mode.
29. Flycheck errors
| Key(s) | Action |
|---|---|
| SPC e n | Go to next error |
| SPC e p | Go to previous error |
| SPC e L | Go to flycheck error list |
30. Flutter
| Key(s) | Action |
|---|---|
| , x x | Flutter run or hot reload |
| , g r | Find references |
31. Rust
| Key(s) | Action |
|---|---|
| , q | rust-quick-run |
| , = = | rust-format-buffer |
32. Python
Install necessary dependencies:
pip install python-language-server pip install importmagic epc
33. JavaScript
To disable warnings of missing trailing semicolon in JavaScript mode, add this to spacemacs config (SPC f e d):
(setq js2-strict-missing-semi-warning nil)
34. Graphviz
| Key(s) | Action |
|---|---|
| , , | prview in emacs |
35. Add your own layer
To create a new layer, press SPC SPC and select configuration-layer/create-layer, a template layer will be auto generated.
Refer to configuring-spacemacs-a-tutorial for more details.