Skip to content

Emacs Quick Referenceλ︎

Todo::Consider moving this to just a reference section. Vim style is the default approach for this book and whist the Emacs bindings are still available in Spacemacs, they are not as focused on great user experience as Vim.λ︎

As Spacemacs is built on Emacs, its worth spending a little time getting uses to working with Emacs.

Here is a short summary of what you need to know. For more details use the built in docs with M-x helm-spacemacs or M-m h SPC.

Starting emacsλ︎

Either emacs as a command line or a desktop icon.

Basic termsλ︎

The 'meta' key is usually the 'Alt' or 'Start Menu' key on your keyboard.

C-<char>   : control + <char>
M-<char>   : meta + <char>
SPC        : space
RET        : return / enter
DEL        : delete or backspace
ESC        : escape; ESC <char> is the same as M-<char>

buffer     : Everything you use, edit or read in emacs. This can be an
             open file, the results of a compilation, your mail and
             several other things, like e.g. a shell window.
mark       : It is a position in a buffer, that is pushed in a special
             stack, when jumping in the buffer etc. It can be pushed
mode       : Every buffer has a mode. A mode can have special
             functions, colouring, indentions etc.
minibuffer : The line at the bottom, where you can enter commands after
             typing M-x. Most of these commands can be invoked by
             pressing *lot of* keys, but don't worry... from now on,
             I'm going to introduce some of these functions, with the
             actual command name in round brackets.
point      : the actual cursor position

Managing files, buffers and windowsλ︎

C-x C-f    (find-file)                : opens a file
C-x 4 C-f  (find-file-other-window)   : opens a file in the next window
C-x k      (kill-buffer)              : closes the current buffer
C-x C-c    (save-buffers-kill-emacs)  : asks whether it should save your
                                        files and exits
C-x C-s    (save-buffer)              : saves the current buffer
C-x C-w    (write-file)               : saves in a file of your choice
C-x C-b    (list-buffers)             : lists and manages all open
                                        buffers, press ? for help
C-x b      (switch-to-buffer)         : changes the current buffer
C-x 4 b    (switch-to-buffer-other-window) : changes the next window's buffer
C-x 2      (split-window-vertically)  : splits the current window
                                        vertically in half
C-x 3      (split-window-horizontally): splits the current window
                                        horizontally in half
C-x 1      (delete-other-windows)     : closes every but the current window
C-x 0      (delete-window)            : closes the current window
C-x o      (other-window)             : switches to the next window

Simple editingλ︎

C-SPC      (set-mark-command)         : sets the mark where the cursor is
C-w        (kill-region)              : cuts the region from the mark
                                        till point to the clipboard
M-w    (kill-ring-save)       : copies the region from the mark
                    till point to the clipboard
C-y        (yank)                     : pastes from the clipboard
C-a        (beginning-of-line)        : positions the cursor to the
                                        beginning of the line
C-e        (end-of-line)              : positions the cursor to the
                                        end of the line
C-t        (transpose-chars)          : swaps the last two characters
M-t        (transpose-words)          : swaps the last two words
C-x C-t    (transpose-lines)          : swaps the last two lines

Search and replaceλ︎

If the search string contains uppercase letters, it will be case sensitive. Case sensitivity can be toggled with M-c during search in newer versions.

C-s        (isearch-forward)          : searches forward
C-r        (isearch-backward)         : searches backward
M-%        (query-replace)            : replaces a string wherever it
                                        occurs with another, and asks
                                        for permission every time
           (replace-string)           : replaces a string wherever it
                                        occurs with another

Other useful thingsλ︎

           (set-variable)             : sets the value of a variable
C-h v      (describe-variable)        : displays the current value and
                        the meaning of a variable
C-h m      (describe-mode)            : describes the current mode and lists
                                        its functions and key combinations
C-h f      (describe-function)        : explains what a function does
C-g        (keyboard-quit)            : exits from the minibuffer
C-h ?      (help-for-help)            : gives a help for using help commands
C-_        (undo)                     : undoes the last change
           (man)                      : invokes the manual in the next window

Managing caseλ︎

Spacemacs Major mode Emacs Evil Command Description
C-x C-l downcase-region Convert region to lower case
C-x C-u upcase-region Convert region to upper case
M-c capitalize-word Capitalize the following word
M-u upcase-word Convert following word to upper case
M-l ** downcase-word Convert following word to lower case

** The keybinding M-l is bound to markdow-demote in spacemacs

The ~/.emacs fileλ︎

You can assign hot-keys for frequently used commands:

"(global-set-key key 'command)", e.g. I recommend the following:

(global-set-key "\C-cr" 'revert-buffer) ; C-c r reverts the file from disk (global-set-key [f12] 'compile) (global-set-key [f10] 'shell) (global-set-key [end] 'end-of-buffer) ; only for the new emacs (global-set-key [home] 'beginning-of-buffer) ; only for the new emacs

Advanced functionsλ︎


Mode-specific indention:
TAB        (indent-relative)          : indents the current line
C-M-\      (indent-region)            : indents the selected region

Modes are automatically entered, e.g. when you open a file of a known
extension. To force a mode-change, you can type these:
           (latex-mode)               : enters LaTeX mode
           (c++-mode)                 : enters C++ mode
           (ada-mode)                 : enters Ada mode
           (irchat)                   : enters IRC mode (IRChat 2.4+ needed)
           (rmail)                    : enters mail mode
           (gnus)                     : enters news-reading mode
           (tcl-mode)                 : enters TCL mode

I advise to use IRChat in a new frame (i.e. in another window): (new-frame) : opens a new window (only in X/Windows)

External programsλ︎

           (shell)                    : starts a terminal in the window
           (ediff)                    : compares two files and makes changes
           (gdb)                      : runs the GNU Debug tool

Simple editing (2)λ︎

M-PgUp     (scroll-other-window-down) : scrolls up the next window
M-PgDn     (scroll-other-window)      : scrolls down the next window
C-x C-SPC  (pop-global-mark)          : pops the top mark from the stack,
                                        and moves the cursor there
C-x C-x    (exchange-point-and-mark)  : exchanges the mark with cursor position
C-x r SPC  (point-to-register)        : stores the buffer & cursor position
                                        to a register
C-x r j    (jump-to-register)         : jumps to a previously stored
M-D        (kill-word)                : cuts from point until
                                        the next whitespace character
M-DEL      (backward-kill-word)       : cuts from the last whitespace
                                        character until point
C-k        (kill-line)                : cuts the line from point
C-x r k    (kill-rectangle)           : cuts the rectangle defined by
                                        the mark as upper left and
                                        point as lower right corner
                                        to the clipboard
C-x r y    (yank-rectangle)           : pastes a rectangle
M-c        (capitalize-word)          : capitalizes the word under cursor
M-l        (downcase-word)            : changes the word to lowercase
M-u        (upcase-word)              : changes the word to uppercase
           (iso-accents-mode)         : turns on/off flying accents (',~,^)

Search and replace (2)λ︎

C-x n n    (narrow-to-region)         : temporarily crops the buffer to the
                                        selected region
C-x n w    (widen)                    : restores the un-cropped buffer
C-M-%      (query-replace-regexp)     : replaces a regexp wherever it
                                        occurs with a string, and asks
                                        for permission every time
           (replace-regexp)           : replaces a regexp wherever it
                                        occurs with a string
           (occur)                    : lists all occurrences of search string
           (find-name-dired)          : searches for a file with the
                                        specified name
           (find-grep-dired)          : searches for a file that contains
                                        the specified string

Fun things to doλ︎

           (gomoku)                   : emacs plays gomoku with you
           (blackbox)                 : a nice logical game
           (dunnet)                   : a hilarious interactive fiction
           (malyon)                   : a z-code player; you can download
                                        tons of IF games and this library
           (calendar)                 : a calendar that tells you
                                        everything you want to know about
                                        any day and also provides a
                                        diary - press ? for commands

Did you know?λ︎

  • You can complete minibuffer commands with TAB. If you press it twice, completions appear in the next window.
  • You can hide most of the 'information' buffers (like info, man, completions, help etc.) with q.
  • If you press enter on a directory when typing an address in the minibuffer, a friendly navigator appears.