Toby's Emacs Keybindings
Keybindings
Emacs Commands
| Key-Chord | Command |
| C-x b | Switch to another buffer |
| C-x C-f | Open a new file |
| C-x f | Search project for file |
| C-v | Page down |
| M-v | Page up |
| TAB | Indent current line |
| C-k | “Kill” from point to EOL |
| C-y | “Yank” (paste) last Kill |
| C-w | Kill current Region |
| C-SPC | Set the “Mark” (One end of a Region) |
| F5 | Save open buffers |
| C-g | Abort command |
| M-x | Search commands by name |
Dired
| Keystroke | Command |
|---|---|
| C-x d | Open Dired |
| C-x d <REGEX> | Open Dired filterd by REGEX |
| ( | Toggle details |
| A | Search marked file |
| B | Byte-compile elisp files |
| D | Delete marked files |
| L | Load elisp files |
| Q | Query Replace in marked entries |
| R | Rename |
| T | Touch marked files |
| X | Shell Command on files |
| Z | Compress marked files |
| ^ | Go up a directory |
| < | Previous Dir (in this buffer) |
| > | Next Dir |
| c | Copy marked files |
| g | Read all dirs aGain |
| i | Insert subdirectory into this listing |
| C-u u | Un-insert |
| m | Mark an entry |
| s | Symlink marked files |
| t | Toggle marks |
| u | Unmark file |
| U | Unmark all files |
| : d | Decrypt |
| : e | Encrypt |
Also great is the wdired command, which creates a dired listing
that can be edited and saved. This makes for easy renames and file
mode changes.
Registers
| Key-Chord | Command |
| C-x r w | Save current window lay-out to a register |
| C-x r j | Restore windows from register |
Searching/Replacing
(global-set-key (kbd "C-s") 'isearch-forward-regexp) (global-set-key (kbd "C-r") 'isearch-backward-regexp) (global-set-key (kbd "C-M-s") 'isearch-forward) (global-set-key (kbd "C-M-r") 'isearch-backward) (global-set-key (kbd "M-%") 'query-replace-regexp) (global-set-key [(meta shift a)] 'ack) (global-set-key [(meta super shift a)] 'ack-same)
Activate occur easily inside isearch:
(define-key isearch-mode-map (kbd "C-o") (lambda () (interactive) (let ((case-fold-search isearch-case-fold-search)) (occur (if isearch-regexp isearch-string (regexp-quote isearch-string))))))
Spelling
(global-set-key (kbd "C-c j") 'flyspell-check-previous-highlighted-word) (global-set-key (kbd "s-s") 'ispell-word)
Navigation
https://github.com/abo-abo/avy
(global-set-key (kbd "M-g") 'goto-line) (global-set-key (kbd "M-z") 'zap-to-char) (global-unset-key (kbd "M-SPC")) (require-package 'avy) (global-set-key (kbd "M-SPC") 'avy-goto-word-1) (global-set-key (kbd "C-c SPC") 'avy-goto-word-1)
Frame/Window Properties
(define-key global-map (kbd "C-+") 'text-scale-increase) (define-key global-map (kbd "C--") 'text-scale-decrease) (define-key global-map (kbd "C-=") 'text-scale-set) (global-set-key (kbd "C-s-f") 'ns-toggle-fullscreen)
File and Buffer Switching
Commands to switch buffers:
(global-set-key (kbd "C-x C-i") 'ido-imenu) (global-set-key (kbd "C-x M-f") 'ido-find-file-other-window) (global-set-key (kbd "C-c y") 'bury-buffer) (global-set-key (kbd "C-c r") 'revert-buffer) (global-set-key (kbd "M-`") 'file-cache-minibuffer-complete) (global-set-key (kbd "C-x C-b") 'ibuffer)
Commands to switch windows:
(windmove-default-keybindings) ;; Shift+direction (global-set-key (kbd "C-x O") (lambda () (interactive) (other-window -1))) ;; back one (global-set-key (kbd "C-x C-o") (lambda () (interactive) (other-window 2))) ;; forward two (global-set-key (kbd "M-s-<left>") 'windmove-left) (global-set-key (kbd "M-s-<right>") 'windmove-right) (global-set-key (kbd "s-<left>") 'windmove-left) (global-set-key (kbd "s-<right>") 'windmove-right) (global-set-key (kbd "s-<down>") 'windmove-down) (global-set-key (kbd "s-<up>") 'windmove-up)
The ace-window package will display numbers in the various
open windows, if there are more than two. This can make things a
bit easier to navigate when you have your screen split up into a
bunch of different panes.
https://github.com/abo-abo/ace-window
(require-package 'avy) (require-package 'ace-window) (global-set-key (kbd "C-x o") 'ace-window) (global-set-key (kbd "M-p") 'ace-window) (setq aw-keys '(?a ?o ?e ?u ?i ?d ?h ?t ?n ?s))
For those occassions when you want the old window switching behavior:
(global-unset-key (kbd "<f3>")) (global-set-key (kbd "<f3>") 'kmacro-start-macro-or-insert-counter)
On keyboards that have extra function keys, some handy short-cuts:
(global-set-key (kbd "<f14>") 'ace-window) (global-set-key (kbd "<f17>") 'ace-window)
On larger screens, I like to divide me frame into thirds:
(defun split-in-thirds () "Split the window vertically into three segments." (interactive) (split-window-horizontally) (split-window-horizontally) (balance-windows)) (global-set-key (kbd "C-x 6") 'split-in-thirds)
Getting Help
Prefer full apropos search over the default apropos-command:
(global-set-key (kbd "C-h a") 'apropos)
Keyboard and Mouse Set-up
- State "ADOPTED" from
- State "EXPERIMENTAL" from
Bind Mac modifier keys:
(setq ns-command-modifier 'meta ; Apple/Command key is Meta ns-alternate-modifier 'super ; Option is the Mac Option key ns-function-modifier 'hyper ; 'super or 'hyper ns-pop-up-frames nil )
Make `super` + x the same as Meta-x:
(global-set-key (kbd "s-x") 'smex)
Mouse scrolling needs to calm down:
(setq mouse-wheel-scroll-amount '(1)) (setq mouse-wheel-progressive-speed nil)
Adjust the echo threshold for key-chords:
(setq echo-keystrokes 0.02)
Terminal Mode Affordances
Attempt to accomodate modifiers to arrow keys in the terminal:
(define-key input-decode-map "\e[1;5A" [C-up]) (define-key input-decode-map "\e[1;5B" [C-down]) (define-key input-decode-map "\e[1;5C" [C-right]) (define-key input-decode-map "\e[1;5D" [C-left]) (define-key function-key-map "\M-[ a" [C-up]) (define-key function-key-map "\M-[ b" [C-down]) (define-key function-key-map "\M-[ c" [C-right]) (define-key function-key-map "\M-[ d" [C-left])
(provide 'keybindings)