Difference between revisions of "Readline (简体中文)"

From ArchWiki
Jump to: navigation, search
m (Change to zh_CN translateme.)
Line 1: Line 1:
[[Category:Command shells (简体中文)]]  
[[Category:Command shells (简体中文)]]  
{{translateme (简体中文)}}
{{translateme (简体中文)}}
{{Article summary start|摘要}}
{{Article summary start|摘要}}

Revision as of 15:34, 13 June 2012


附注: please use the first argument of the template to provide more detailed indications.

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary link Template:Article summary heading Template:Article summary wiki Template:Article summary end

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.

Command-line editing

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

You may find either vi or emacs cheat sheets useful.




  • ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig
  • who
  • mount
  • man mount

通常,当输入 ls 并按向上箭头,你的输入就会被替换为 man mount。如果你使用了搜索历史功能,那么只有过去以 ls(当前输入的)开头的命令会被显示,在这里就是 ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig

把以下内容加入到 /etc/inputrc 或者 ~/.inputrc可以启动这个模式:


如果你在使用 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

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:

$include /etc/inputrc

Alternatively, one can use reverse-search-history (incremental search) by pressing Template:Keypress+Template:Keypress, 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 Template:Keypress+Template:Keypress again during this mode will display the previous line in the buffer that matches the current search term, while pressing Template:Keypress+Template:Keypress (abort) will cancel the search and restore the current input line. So in order to search through all previous mount commands, press Template:Keypress+Template:Keypress, type 'mount' and keep pressing Template:Keypress+Template:Keypress until the desired line is found.

The forward equivalent to this mode is called forward-search-history and is bound to Template:Keypress+Template:Keypress by default. Beware that most terminals override Template:Keypress+Template:Keypress to suspend execution until Template:Keypress+Template:Keypress 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 Template:Keypress+Template:Keypress which is not bound by default:


History search

Avoid duplicates

If you repeat the same command several times, they will all be appended in your history. To prevent this, add to your ~/.bashrc:

export HISTCONTROL=ignoredups

Avoid whitespaces

To disable logging blank commands add this to your ~/.bashrc:

export HISTCONTROL=ignorespace

If your ~/.bashrc already contains

export HISTCONTROL=ignoredups

replace it with

export HISTCONTROL=ignoreboth


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 Template:Keypress+Template:Keypress. Readline will act as though Template:Keypress+Template:Keypress (end-of-line) had been pressed, appended with ' # macro'.

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 Template:Keypress+Template:Keypress+Template:Keypress append "| less" to the line and run it (Template:Keypress+Template:Keypress is equivalent to Template:Keypress:

"\e\C-l":"\C-e | less\C-m"

The next one prefixes the line with 'yes |' when pressing Template:Keypress+Template:Keypress+Template:Keypress, 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 Template:Keypress+Template:Keypress is pressed:

"\es":"\C-a su -c '\C-e'\C-m"

As a last example, quickly send a command in the background with Template:Keypress+Template:Keypress+Template:Keypress, 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 readline, the terminal now echoes ^C after Template:Keypress+Template:Keypress is pressed. For users who wish to disable this, simply add the following to ~/.inputrc:

set echo-control-characters off