readline: Key bindings

Tags: til cli readline bash

Bash uses the readline library to manage the input. It's a very powerful line editor in its own right with both emacs and vim inspired keybindings. This page lists my key bindings (found on MacOS).

Default (emacs mode) bindings:

C-_       (readline)undo
C-?       (readline)backward-delete-char
C-]       (readline)character-search
C-@       (readline)set-mark
C-a       (readline)beginning-of-line
C-b       (readline)backward-char
C-d       (readline)delete-char
C-e       (readline)end-of-line
C-f       (readline)forward-char
C-g       (readline)abort
C-h       (readline)backward-delete-char
C-i       (readline)complete
C-k       (readline)kill-line
C-l       (readline)clear-screen
C-m       (readline)accept-line
C-n       (readline)next-history
C-o       (readline)operate-and-get-next
C-p       (readline)previous-history
C-q       (readline)quoted-insert
C-s       (readline)forward-search-history
C-u       (readline)unix-line-discard
C-v       (readline)quoted-insert
C-w       (readline)unix-word-rubout
C-x!      (readline)possible-command-completions
C-x(      (readline)start-kbd-macro
C-x)      (readline)end-kbd-macro
C-x@      (readline)possible-hostname-completions
C-x*      (readline)glob-expand-word
C-x/      (readline)possible-filename-completions
C-x~      (readline)possible-username-completions
C-x$      (readline)possible-variable-completions
C-xA      (readline)do-lowercase-version
C-xB      (readline)do-lowercase-version
C-xC      (readline)do-lowercase-version
C-xC-?    (readline)backward-kill-line
C-xC-e    (readline)edit-and-execute-command
C-xC-m    (readline)shell-expand-line
C-xC-r    (readline)re-read-init-file
C-xC-u    (readline)undo
C-xC-v    (readline)display-shell-version
C-xC-x    (readline)exchange-point-and-mark
C-xD      (readline)do-lowercase-version
C-xe      (readline)call-last-kbd-macro
C-xE      (readline)do-lowercase-version
C-xF      (readline)do-lowercase-version
C-xG      (readline)do-lowercase-version
C-xg      (readline)glob-list-expansions
C-xH      (readline)do-lowercase-version
C-xI      (readline)do-lowercase-version
C-xJ      (readline)do-lowercase-version
C-xK      (readline)do-lowercase-version
C-xL      (readline)do-lowercase-version
C-xM      (readline)do-lowercase-version
C-xN      (readline)do-lowercase-version
C-xO      (readline)do-lowercase-version
C-xP      (readline)do-lowercase-version
C-xQ      (readline)do-lowercase-version
C-xR      (readline)do-lowercase-version
C-xS      (readline)do-lowercase-version
C-xs      (readline)spell-correct-word
C-xT      (readline)do-lowercase-version
C-xU      (readline)do-lowercase-version
C-xV      (readline)do-lowercase-version
C-xW      (readline)do-lowercase-version
C-xX      (readline)do-lowercase-version
C-xY      (readline)do-lowercase-version
C-xZ      (readline)do-lowercase-version
C-y       (readline)yank
C-z       (readline)vi-editing-mode
M-_       (readline)insert-last-argument
M-_       (readline)yank-last-arg
M--       (readline)digit-argument
M-!       (readline)complete-command
M-?       (readline)possible-completions
M-.       (readline)insert-last-argument
M-.       (readline)yank-last-arg
M-(       (readline)redraw-current-line
M-[1;3C   (readline)forward-word
M-[1;3D   (readline)backward-word
M-[1;5C   (readline)forward-word
M-[1;5D   (readline)backward-word
M-[2~     (readline)overwrite-mode
M-[200~   (readline)bracketed-paste-begin
M-[3;5~   (readline)kill-word
M-[3~     (readline)delete-char
M-[5~     (readline)history-search-backward
M-[6~     (readline)history-search-forward
M-[A      (readline)previous-history
M-[B      (readline)next-history
M-[C      (readline)forward-char
M-[D      (readline)backward-char
M-[F      (readline)end-of-line
M-[H      (readline)beginning-of-line
M-{       (readline)complete-into-braces
M-@       (readline)complete-hostname
M-*       (readline)insert-completions
M-/       (readline)complete-filename
M-\\      (readline)delete-horizontal-space
M-&       (readline)tilde-expand
M-#       (readline)insert-comment
M-^       (readline)history-expand-line
M-<       (readline)beginning-of-history
M-=       (readline)possible-completions
M->       (readline)end-of-history
M-~       (readline)complete-username
M-$       (readline)complete-variable
M-0       (readline)digit-argument
M-1       (readline)digit-argument
M-2       (readline)digit-argument
M-3       (readline)digit-argument
M-4       (readline)digit-argument
M-5       (readline)digit-argument
M-6       (readline)digit-argument
M-7       (readline)digit-argument
M-8       (readline)digit-argument
M-9       (readline)digit-argument
M-A       (readline)do-lowercase-version
M-b       (readline)backward-word
M-B       (readline)do-lowercase-version
M-C       (readline)do-lowercase-version
M-C-?     (readline)backward-kill-word
M-C-]     (readline)character-search-backward
M-C-b     (readline)shell-backward-word
M-C-d     (readline)shell-kill-word
M-C-e     (readline)shell-expand-line
M-C-f     (readline)shell-forward-word
M-C-g     (readline)abort
M-C-h     (readline)backward-kill-word
M-C-i     (readline)dynamic-complete-history
M-C-l     (readline)clear-display
M-C-r     (readline)revert-line
M-C-t     (readline)shell-transpose-words
M-C-y     (readline)yank-nth-arg
M-D       (readline)do-lowercase-version
M-d       (readline)kill-word
M-E       (readline)do-lowercase-version
M-F       (readline)do-lowercase-version
M-f       (readline)forward-word
M-G       (readline)do-lowercase-version
M-g       (readline)glob-complete-word
M-H       (readline)do-lowercase-version
M-I       (readline)do-lowercase-version
M-J       (readline)do-lowercase-version
M-K       (readline)do-lowercase-version
M-L       (readline)do-lowercase-version
M-l       (readline)downcase-word
M-M       (readline)do-lowercase-version
M-M-      (readline)complete
M-N       (readline)do-lowercase-version
M-n       (readline)non-incremental-forward-search-history
M-OA      (readline)previous-history
M-OB      (readline)next-history
M-OC      (readline)forward-char
M-OD      (readline)backward-char
M-OF      (readline)end-of-line
M-OH      (readline)beginning-of-line
M-P       (readline)do-lowercase-version
M-p       (readline)non-incremental-reverse-search-history
M-Q       (readline)do-lowercase-version
M-R       (readline)do-lowercase-version
M-r       (readline)revert-line
M-S       (readline)do-lowercase-version
M-Space   (readline)set-mark
M-T       (readline)do-lowercase-version
M-t       (readline)transpose-words
M-U       (readline)do-lowercase-version
M-u       (readline)upcase-word
M-V       (readline)do-lowercase-version
M-W       (readline)do-lowercase-version
M-X       (readline)do-lowercase-version
M-x       (readline)execute-named-command
M-Y       (readline)do-lowercase-version
M-y       (readline)yank-pop
M-Z       (readline)do-lowercase-version
Space     (readline)magic-space

I add some extra convenience bindings:

F7        readline-insert datetime localdate
C-xC-d    readline-insert datetime localdate
C-xC-f    readline-complete fzf-file
C-xC-g    readline-complete git-interesting-files
C-xC-k    readline-complete words
C-xC-l    readline-complete tmux-line
C-xC-p    readline-complete tmux-word
C-xC-t    readline-insert datetime localtime
Published on: 05 Aug 2026