Display current readline key and function bindings, bind a key sequence to a readline function or macro, or set a readline variable.


bind [-m keymap] [-lpsvPSV] 
bind [-m keymap] [-q function] [-u function] [-r keyseq] 
bind [-m keymap] -f filename 
bind [-m keymap] -x keyseq:shell-command 
bind [-m keymap] keyseq:function-name or readline-command

Each non-option argument is a command as it would appear in .inputrc, but each binding or command must be passed as a separate argument; e.g., ‘”\C-x\C-r”: re-read-init-file’.

   -m keymap    Use keymap as the keymap to be affected by the subsequent bindings.
                Acceptable keymap names are emacs, emacs-standard, emacs-meta, emacs-ctlx, vi,
                vi-move, vi-command, and vi-insert. vi is equivalent to vi-command;
                emacs is equivalent to emacs-standard.

   -l           List the names of all readline functions.

   -p           Display readline function names and bindings in such a way that they can be re-read.

   -P           List current readline function names and bindings.

   -s           Display readline key sequences bound to macros and the strings they output in such a way that
                they can be re-read.

   -S           Display readline key sequences bound to macros and the strings they output.

   -v           Display readline variable names and values in such a way that they can be re-read.

   -V           List current readline variable names and values.

   -f filename  Read key bindings from filename.

   -q function  Query about which keys invoke the named function.

   -u function  Unbind all keys bound to the named function.

   -r keyseq    Remove any current binding for keyseq.

   -x keyseq:shell-command   Cause shell-command to be executed whenever keyseq is entered.
                When shell-command is executed, the shell sets the READLINE_LINE variable to the
                contents of the readline line buffer and the READLINE_POINT variable to the current
                location of the insertion point. If the executed command changes the value of
                READLINE_LINE or READLINE_POINT, those new values will be reflected in the editing state.

The return value is 0 unless an unrecognized option is given or an error occurred.

You can determine the character sequence emitted by a key by pressing Ctrl-v at the command line, then pressing the key you’re interested in. Alternatively run the read command and then press the key(s) of interest, Control-c will return from the read builtin command.

The \e is the escape character, displayed as ^[ in the shell output.

bind is an internal command; bind key mappings can be abbreviated by ommiting the bind command and the outer set of single quotes.


Setup the shell to perform a history search when the Up and Down arrow keys are used.
This allows typing part of a command and then using the arrows to select matching commands from history.
(by default Up and Down will just select previous commands without any matching against history.)

bind ‘”\e[A”:history-search-backward’
bind ‘”\e[B”:history-search-forward’
bind ‘”\e[C”: forward-char’
bind ‘”\e[D”: backward-char’

The last two bindings ensure that the left and right keys continue to work correctl