Keyboard Setup
On Cherry keyboard, I swap setxkbmap -option caps:swapescape -option ctrl:swap_lwin_lctl -option ctrl:swap_rwin_rctl
into ~/.xinitrc file.
Basics
- install Emacs 24:
sudo apt-get install emacs24(on Mint)sudo apt install emacs(on Ubuntu 16.4)choco install emacs(on Windows) - start emacs GUI:
emacs; start in terminal:emacs -nw("NoWindow"); - quit Emacs:
C-x C-c. In Evil:qor:x; ESCis the same withM-. For example, the following actions has the same effect: action A: pressingAltandxsimutaneously; action B: pressESC, release it, then pressx- show line number:
M-x linum-mode - run lisp command in emacs: in scratch buffer, input expression,
put the cursor at the end of the it, and press
C-x C-e; - repeat last command:
- word completion:
M-/, if the word completed is not your hoped, press again. (see "3.4. Word Abbreviations" in "Learning GNU Emacs" for more) - scroll window: Current window: PgUp/PgDown; Other window: C-M-v/V
Help & manual
- query shortcut of a command:
C-h w, for example:C-h w where-is; query command of a shortcut:C-h k, for example:C-h k C-h k; - list all available command of current buffer:
C-h b; - list all Emacs key shortcuts:
M-x describe-bindings - read Emacs manual in Emacs:
M-x infouseC-sto search string, keep pressingC-sto cycle through the results. useqto quit. - read man page: M-x man
command-name - cancel command in mini-buffer:
C-g
File & buffer
- open an existing file or create a new file buffer:
C-x C-f, edit remote files:C-x C-f /user@host:file_path - save to file:
C-x C-s; - list buffers:
C-x C-b; - switch to another (opening) buffer:
C-x b; - go to previous/next buffer:
C-xfollowed by Left/Right arrow key; - kill current buffer:
C-x k;
Panes
- C-x 1: unsplit window
- C-x 2: split window horizontally
- C-x 3: split window vertically
- C-x o: switch to other pane in split window
Editing
- undo: C-/
- bookmarks: Set bookmarks:
C-x r m; List bookmarks: C-x r l you can edit bookmarks in this window, useqto quit; jump to bookmarks:C-x r b; rename or delete bookmarks:M-x bookmark-...
Navigation
- M-<: move to the beginning of a buffer
- M->: move to the end of a buffer
- C-a: move to the beginning of line
- C-e: move to the end of line
- C-f: forward character
- C-b: backward character
- C-p: down a line
- C-n: up a line
- M-f: forward word
- M-b: backward word
Visual mode
- Shift with any of the navigation key: select and move
- Ctrl-@ (or
M-x set-mark-command): set a mark for selection Note:C-spacenot works on Windows
Cut & paste
- C-w: cut
- C-y: paste
- C-d: delete character ahead
- M-d: delete word ahead
- backspace: delete character behind
- M-backspace: delete word behind
- C-k: cut from cursor to end of line
Search & replace
- search:
C-s(forward),C-r(backward) - find next:
C-sorC-r - search and replace
M-% - recursive edit in query-replace: enter recursive mode: C-r, quit recursive mode: C-M-c
- find files in a directory: M-x find-name-dired, or locate;
- search text in files under a directory: M-x grep-find;
Text search in current folder
For example when I want to search the definition of wiki
in all .hs files in current folder (~/Documents/gitit):
M-x rgrep <RET> ^\s*wiki\s <RET> *.hs <RET> ~/Documents/gitit <RET>
When the current buffer is associated with a .hs file in folder ~/Documents/gitit,
and the cursor on the word wiki, rgrep command will provide default value
of file type and target folder.
You can press
M-x rgrep <RET> ^\s*wiki\s <RET><RET><RET>
Paredit mode
Navigation
- C-M-b: move backward a sexp on the same level
- C-M-f: move forward a sexp on the same level
- C-M-u: move backward up a level (the key u means up)
- C-M-n: move forward up a level
- C-M-p: move backward down a level
- C-M-d: move forward down a level (the key d means down)
Edit
- C-M-k: kill sexp under cursor
- M-S (Alt-Shift-s, or ESC, Shift-s): split sexp at the cursor
- M-J (Alt-Shift-j): join sexp A and B, the cursor must be put between A and B
- M-": doublequote the sexp
- M-(: wrap the sexp with parenthesis
- M-?: convolute sexp (this is magical~)
Clojure mode
- M-x cider-jack-in: start repl in a new window;
- C-c C-k: compile current file;
- C-x C-e: cider-eval-last-expression, evaluate expression immediately preceding the cursor in the REPL;
- C-u C-x C-e: prints the result of the evaluation after cursor;
- C-c M-n: set the namespace of the REPL with the file's namespace;