Emacs key bindings for Elisp programming
Table of Contents
1 Emacs key bindings for Elisp programming
1.1 Elisp Evaluation
| Command: M-x [command] | Key Binding | Description |
|---|---|---|
| eval-last-sexp | C-x C-e | Evaluate last s-expression under cursor |
| eval-print-last-sexp | - | Evaluate last s-expression under cursor and print. |
| eval-expression | M-: | Execute S-expression in minibuffer. |
| - | C-u M-: | Evaluate S-expression in minibuffer and insert result at point. |
| eval-defun | C-M-x | Evaluates the outermost S-expression, regardless of cursor position |
| within the s-exp. | ||
| eval-buffer | C-c C-b | Eval the whole buffer |
| eval-region | - | Eval the selected text |
| Eval and print last s-expression. | ||
| Eval last s-expression. | ||
| repeat-complex-command | C-x ESC ESC | Useful to reverse engineering Emacs' commands executed with M-x like M-x |
| lgrep or repeat it. |
Note: command M-x repeat-complex-command.
Example: User enter
- M-x lgrep
- Prompt 1 -> Search for: system.windows.forms
- Prompt 2 -> In files (default *.org): *.org
- Prompt 3 -> In directory: ~/Documents/wiki
To extract the command type C-x ESC ESC and copy it from the minibuffer with C-k and then paste with in the buffer with C-y. The result will be:
(lgrep "system.windows.forms" "*.org" "~/Documents/wiki" nil)
This s-expression can be run again or used in a function or any Elisp app. Example:
(defun search-my-dir () (interactive) (lgrep (read-string "Search wiki: ") "*.org" "~/Documents/wiki" nil))
M-x search-my-dir system.windows will search all *.org files containing the line that matches system.windows in the directory ~/Documents/wiki.
1.2 Elisp Debugger / Edebug
This video shows how to use Edebugger to debug Elisp functions and code:
| Keybinding | M-x command | Description |
|---|---|---|
| Emacs | ||
| C-u C-M-x | edebug-defun | Instrumment function for debugging. |
| Inside Edebug | ||
| q | Abort execution | |
| space | Setep through, single step. | |
| b | Insert breakpoint | |
| u | Unset breakpoint. | |
| shift-G | Continue beyond breakpoint | |
| i | Jump to definition of defunction | |
| M-: | Prompt for an expression to evaluate. | |
| c | Continue execution | |
| x | Set a conditional breakpoint | |
Edebug info nodes documentation:
(info "(elisp) Edebug Execution Modes") (info "(elisp) Instrumenting")
See also:
- Debugging basics by Nic Ferrier - Edebug, instrumenting and stepping and breakpoints. Also macroexpand and how it helps with debugging.
1.3 Useful Commands
| Command: M-x [command] | Key Binding | Description |
|---|---|---|
| check-paren | Find unmatched parenthesis | |
| checkdoc | Check docstring in an Elisp package (*.el file). | |
| auto-insert | Insert header file of an Elisp package's header file. | |
| view-echo-area-messages | C-h e | Show the message buffer |
| Elisp library | ||
| find-variable | Open the elisp file at the point the variable is defined. | |
| find-library | Open an Emacs library or package in the load-path. | |
| find-function | Opens an library.el file at the point the function is defined. | |
| locate-library | Show path of a library.el (Emacs Package) file. | |
| Documentation Commands | ||
| apropos | Search for all elisp symbols, variables and functions that match a regex pattern. | |
| apropos-command | C-h a | Search for all commands (M-x cmd) that match a regexp pattern. |
| apropos-library | Show all symbols associated with an Elisp library (Emacs Package) | |
| info-apropos | Find all info pages that match a pattern. | |
| describe-function | C-h f | Show function documentation or docstring. |
| describe-mode | C-h m | Show current major mode documentation and all key bindings associated. |
| describe-bindings | C-h-b | Show all associated key bindings with the current buffer. |
| describe-variable | C-h v | Show variable documentation |
| describe-package | Describe an Emacs package installed from Melpa repository. | |
1.4 IELM - Emacs Lisp Interpreter
| M-x ielm | Run Emacs Lisp Interpreter |
| C-c C-b | (IELM only) Change the current buffer of IELM. It is useful control buffers from IELM shell. |
| C-[up] | (All Shells) Get the next input in the history |
| C-[down] | (All Shells) Get the previous input in the history |
| M-p | (All Shells) Get the previous input in the history |
| M-n | (All Shells) Get the next input in the history |
| C-c C-l | Display the shell history in another window |
1.5 S-expression Navigation
| C-M-n | Move forward over a parenthetical group |
| C-M-p | Move backward over a parenthetical group |
| C-M-f | Move forward over a balanced expression |
| C-M-b | Move backward over a balanced expression |
| C-M-k | Delete s-expression under cursor |
| C-M-a | Move to the beggining of current function |
| C-M-e | Move to the end of current function |
1.6 Delimiter Wrapping
| M-( | Wrap selection in parentheses |
| M-[ | Wrap selection in square brackets |
| M-{ | Wrap selection in curly brackets |