Readline is a library by the GNU Project, used by Bash and other CLI-interface programs to edit and interact with the command line. Before reading this page please refer to the library home page as only subtle configuration will be introduced here.
By default Readline uses Emacs style shortcuts for interacting with command line. However, vi style editing interface is also supported. If you are a vi or vim user, you may want to put the following line to your
~/.inputrc to enable vi-like keybindings:
set -o vi
如果你在使用 vi 模式，添加下面几行到
~/.inputrc (来自 这个帖子):
set editing-mode vi $if mode=vi set keymap vi-command # these are for vi-command mode "\e[A": history-search-backward "\e[B": history-search-forward set keymap vi-insert # these are for vi-insert mode "\e[A": history-search-backward "\e[B": history-search-forward $endif
If you chose to add these lines to
~/.inputrc, it is recommended that you also add the following line at the beginning of this file to avoid strange things like this:
Alternatively, one can use reverse-search-history (incremental search) by pressing
R, which does not search based on previous input but instead jumps backwards in the history buffer as commands are typed in a search term. Pressing
R again during this mode will display the previous line in the buffer that matches the current search term, while pressing
G (abort) will cancel the search and restore the current input line. So in order to search through all previous
mount commands, press
R, type 'mount' and keep pressing
R until the desired line is found.
The forward equivalent to this mode is called forward-search-history and is bound to
S by default. Beware that most terminals override
S to suspend execution until
Q is entered. (This is called XON/XOFF flow control). For activating forward-search-history, either disable flow control by issuing:
$ stty -ixon
or use a different key in
inputrc. For example, to use
S which is not bound by default:
If you repeat the same command several times, they will all be appended in your history. To prevent this, add to your
To disable logging blank commands add this to your
~/.bashrc already contains
replace it with
Readline also supports binding keys to keyboard macros. For simple example, run this command in Bash:
bind '"\ew":"\C-e # macro"'
or add the part within single quotes to inputrc:
"\ew":"\C-e # macro"
Now type a line and press
W. Readline will act as though
E (end-of-line) had been pressed, appended with '
Use any of the existing keybindings within a readline macro, which can be quite useful to automate frequently used idioms. For example, this one makes
L append "| less" to the line and run it (
M is equivalent to
"\e\C-l":"\C-e | less\C-m"
The next one prefixes the line with 'yes |' when pressing
Y, confirming any yes/no question the command might ask:
"\e\C-y":"\C-ayes | \C-m"
This example wraps the line in
su -c '', if
S is pressed:
"\es":"\C-a su -c '\C-e'\C-m"
As a last example, quickly send a command in the background with
B, discarding all of its output:
"\e\C-b":"\C-e > /dev/null 2>&1 &\C-m"
Tips and tricks
Disabling control echo
Due to an update to
C is pressed. For users who wish to disable this, simply add the following to
set echo-control-characters off