8.4 可绑定的 Readline 命令(Bindable Readline Commands)

该章节描述的是可以绑定到按键序列的 Readline 命令。你可以执行命令“bind -P”来列出你的按键绑定,或使用“bind -p”(参见 4.2《Bash 内建命令》)列出可适用于 inputrc 文件的更简洁的格式。没有按键序列的命令名默认会被解除绑定。

在下面的描述中,参考点(point)引用为当前光标位置,而标记点(mark)引用到由 set-mark 命令保存的光标位置。在参考点与标记点之间的文本引用为区域(region)。

译者注:在 Readline 命令行中,这里相对光标或参考点的向前,指的是向该点右侧;向后,则是向左侧。

译者注:在命令历史列表中的向前,是相对当前历史行向下;向后是相对当前历史行向上。

8.4.1 移动命令(Commands For Moving)

beginning-of-line (C-a)

移动到当前行的行首。

end-of-line (C-e)

移动到当前行的行尾。

forword-char (C-f)

向前移动一个字符。

backword-char (C-b)

向后移动一个字符。

forward-word (M-f)

向前移动到当前或下一个单词的末尾。单词是由字母和数字组成的。

backward-word (M-b)

向后移动到当前或上一单词的开头。单词是由字母和数字组成的。

shell-forward-word (M-C-f)

向前移动到当前或下一个单词的末尾。单词是由未引起来的shell元字符划分的。

shell-backward-word (M-C-b)

向后移动到当前或上一单词的开头。单词是由未引起来的shell元字符划分的。

previous-screen-line ()

试图将参考点移动到与上一物理屏幕行相同的物理屏幕列上。如果当前Readline没有占据多于一行的物理行,或如果参考点的位置没有大于提示符长度加屏幕宽度的和,该命令不会产生期望的效果。

next-screen-line ()

试图将参考点移动到与下一物理屏幕行相同的物理屏幕列上。如果当前Readline没有占据多于一行的物理行,或如果当前Readline行没有大于提示符长度加屏幕宽度的和,该命令不会产生期望的效果。

clear-display (M-C-l)

清除屏幕,如果可能的话也会清除终端向后滚动缓存,然后重绘当前行,将当前行留在屏幕顶部。

clear-screen (C-l)

清除屏幕,然后重绘当前行,将当前行留在屏幕顶部。

redraw-current-line ()

刷新当前行。默认该命令未绑定。

8.4.2 操纵历史的命令(Commands For Manipulating The History)

accept-line (换行或回车)

无论光标在什么位置接受该行输入。如果该行不为空行,将其添加到依据变量HISTCONTROL和HISTIGNORE设置的历史列表中。如果该行是一个已修改的历史行,则恢复历史行到其原始状态。

previous-history (C-p)

在历史列表中向后移动,取回上一命令。

next-history (C-n)

在历史列表中向前移动,取回下一命令。

beginning-of-history (M-<)

移动到历史列表中的第一行。

end-of-history (M->)

移动到输入历史的末尾,也就是正在输入的当前行。

reverse-search-history (C-r)

从当前行开始向后搜索并且按需求在历史列表中向上移动。该搜索是一个增量搜索。该命令会为匹配文本设置区域并激活标记点。

forward-search-history (C-s)

从当前行开始向前搜索并且按需求在历史列表中向下移动。该搜索是一个增量搜索。该命令会为匹配文本设置区域并激活标记点。

non-incremental-reverse-search-history (M-p)

对于用户所提供的字符串从当前行开始向后进行非增量搜索并且按需求在历史列表中向上移动。可在历史行中的任意位置匹配搜索字符串。

non-incremental-forward-search-history (M-n)

对于用户所提供的字符串从当前行开始向前进行非增量搜索并且按需求在历史列表中向下移动。可在历史行中的任意位置匹配搜索字符串。

history-search-forward ()

在历史列表中向前搜索从当前行开始位置到参考点位置之间的字符串字符。搜索字符串必须从历史行开头位置进行匹配。该搜索是一个非增量搜索。默认情况下,该命令是未绑定的。

history-search-backward ()

在历史列表中向后搜索从当前行开始位置到参考点位置之间的字符串字符。搜索字符串必须从历史行开头位置进行匹配。该搜索是一个非增量搜索。默认情况下,该命令是未绑定的。

history-substring-search-forward ()

在历史列表中向前搜索从当前行开始位置到参考点位置之间的字符串字符。搜索字符串可匹配历史行任意位置的字符串。该搜索是一个非增量搜索。默认情况下,该命令是未绑定的。

history-substring-search-backward ()

在历史列表中向后搜索从当前行开始位置到参考点位置之间的字符串字符。该搜索字符串可匹配历史行任意位置的字符串。搜索是一个非增量搜索。默认情况下,该命令是未绑定的。

yank-nth-arg (M-C-y)

将前一命令的第一个参数(通常是上一行中的第二个单词)插入到参考点。带有参数“n”的话,插入的则是前一命令的第n个单词(在前一命令中的单词序号是从0开始的)。负数参数代表是从前一命令的末尾倒数的单词。一旦参数“n”参与运算,该参数就会像指定历史扩展“!n”一样被提取出来。

yank-last-arg (M-. 或 M-_)

插入上一命令的最后一个参数(即上一历史条目的最后一个单词)。带有数字参数时,其行为与“yank-nth-arg”完全相同。连续地调用该命令会在历史列表中向后移动,并轮流插入每一行的最后一个单词(或由第一次调用时由参数指定的单词)。提供给这些连续调用的任意数字参数会决定在历史列表中的移动方向。一个负数参数会变换在历史列表的移动方向(向后或向前)。历史扩展功能常用于提取最后一个参数,就像指定历史扩展“!$”一样。

operate-and-get-next (C-o)

为返回调用方应用程序,就像按回车输入新行一样而接受当前行的输入,并且从历史中取回相对于当前行的下一行进行编辑。如果提供了数字参数,其指定的是用来代替当前行所指定的历史条目。

8.4.3 变更文本的命令(Commands For Changing Text)

end-of-file (通常为 C-d)

所产生的字符表示为文件结束设置,例如stty的。如果在读取到该命令产生的字符时,该行上没有其它字符,并且参考点位于该行的开头位置,Readline则将它翻译为输入的结束并返回EOF。

delete-char (C-d)

在参考点删除字符。如果该功能绑定到与tty EOF字符相同的字符,通常是“C-d”,所产生的效果请参照上面的“end-of-file”。

backword-delete-char (删除键)

向光标后面(即左侧)删除字符。数字参数代表终止这些字符而不是删除。

forward-backward-delete-char ()

删除光标处的字符,除非光标处于一行的末尾,其会删除光标后面(即左侧)的字符。默认情况下,该命令不会绑定按键。

quoted-insert (C-q 或 C-v)

将下一个按键产生的字符逐字地添加到行中。例如,如何插入像“C-q”这样的按键序列。

self-insert (a, b, A, 1, !, …)

插入字符自身。

bracketed-paste-begin ()

该功能意图绑定由一些终端发送的范围粘贴“bracketed paste”转义序列,并且会默认分配一个绑定。其允许Readline将粘贴文本作为一个单元进行插入,而不会像从键盘读取的字符那样按字符处理。插入字符就像每一个字符绑定到“self-insert”一样,而不是执行其它一些编辑命令。

范围粘贴会设置插入文本区域(即从参考点到标记点之间的字符)。其使用一个“活动标记点”的概念:当标记点活动时,Readline重显会使用终端突显模式来指示出区域。

transpose-chars (C-t)

将光标后面(即左侧)一个字符拖拽到光标所在字符的前面(即右侧),之后再将光标向前移动。如果插入点是在一行的末尾,则交换该行最后两个字符的位置。负数参数不会产生任何效果。

transpose-words (M-t)

将光标后面(即左侧)一个单词拖拽到光标前面(即右侧),之后再将光标移动到该单词前面。如果插入点是在一行的末尾,则交换该行最后两个单词的位置。

upcase-word (M-u)

将当前(或下一个)单词改写为大写。在使用负数参数时,会将前一(即左侧)单词改写,但不会移动光标。

downcase-word (M-l)

将当前(或下一个)单词改写为小写。在使用负数参数时,会将前一(即左侧)单词改写,但不会移动光标。

capitalize-word (M-c)

将当前(或下一个)单词改写为首字母大写。在使用负数参数时,会将前一(即左侧)单词改写,但不会移动光标。

overwrite-mode ()

切换覆写模式。在明确使用正数参数时,切换到覆写模式。在明确使用非正数参数时,切换到插入模式。该命令只在emacs模式中有效;vi模式修改覆写模式是不同的。每次调用“readline()”时都是处于插入模式。

在覆写模式中,绑定到“self-insert”的字符会在参考点替换文本,而不是将文本向右推。绑定到“backward-delete-char”的字符会将参考点之前的的字符替换为空格。默认情况下,该命令是未绑定的。

8.4.4 终止和拉回(Killing And Yanking)

kill-line (C-k)

终止从参考点到行尾的文本。在带有负数参数时,终止从参考点到行首的文本。

backward-kill-line (C-x Rubout)

终止从参考点到行首的文本。在带有负数参数时,终止从参考点到行尾的文本。

unix-line-discard (C-u)

终止从光标片到当前行首的文本。

kill-whole-line ()

不论参考点在哪,终止当前行上的所有字符。默认情况下,该命令未绑定。

kill-word (M-d)

终止从参考点到当前单词末尾的字符,或如果参考点位于两个单词之间,则终止到下一个单词的末尾。单词边界与“forward-word”命令相同。

backward-kill-word (M-DEL)

终止光标后面(即左侧)的单词。单词边界与“backward-word”命令相同。

shell-kill-word (M-C-d)

终止从参考点到当前单词末尾的字符,或如果参考点位于两个单词之间,则终止到下一个单词的末尾。单词边界与“shell-forward-word”命令相同。

shell-backward-kill-word ()

终止光标后(即左侧)的单词。单词边界与“shell-backward-word”命令相同。

shell-transpose-words (M-C-t)

将参考点前面(即左侧)的单词拖拽到参考点前面(即右侧),再将参考点移动到这个单词前面。如果插入参考点位于行尾,则交换的是该行最后两个单词的位置。单词边界与“shell-forward-word”和“shell-backward-word”相同。

unix-word-rubout (C-w)

使用空格作为单词边界,将参考点后面(即左侧)的单词终止。终止的文本保存到“kill-ring”中。

unix-filename-rubout ()

使用空格和斜线字符作为单词边界,将参考点后面(即左侧)的单词终止。终止的文本保存到“kill-ring”中。

delete-horizontal-space ()

删除在参考点周围的空格和tab字符。默认情况下,该命令未绑定。

kill-region ()

在当前区域终止文本。默认情况下,该命令未绑定。

copy-region-as-kill ()

将区域中的文本复制到“kill buffer”中,因此可以立即将其拉回。默认情况下,该命令未绑定。

copy-backward-word ()

将参考点后面(即左侧)的单词复制到“kill buffer”中。单词边界与“backward-word”相同。默认情况下,该命令未绑定。

copy-forward-word ()

将参考点前面(即右侧)的单词复制到“kill buffer”中。单词边界与“forward-word”相同。默认情况下,该命令未绑定。

yank (C-y)

将“kill ring”顶部拉回到在参考点的缓冲中。

yank-pop (M-y)

翻转“kill-ring”,并且将新顶拉回。只有在上一命令是“yank”或“yank-pop”才能运行这个命令。

8.4.5 指定数字参数(Specifying Numeric Arguments)

digit-argument (M-0, M-1, … M—)

将数字添加到已累积的参数中,或启动一个新的参数。“M--”是负数参数的开头。

universal-argument ()

这是另外一种指定参数的方式。如果该命令后跟随着一个或多个数字,数字前面可选加入负号,则这些数字定义的是参数。如果命令后面是数字,再一次执行“universal-argument”会结束数字参数,但其它的会被忽略。作为一个特殊案例,如果该命令后立即跟随一个即不是数字又是不负号的字符时,下一命令的参数计数会被乘4。参数计数初始值为1,所以第一次执行该功能时会使参数计数变为4,第二次则变为16,以此例推。默认情况下,该按键未绑定。

8.4.6 让 Readline 替你输入(Letting Readline Type For You)

complete (TAB)

试图在参考点之前的文本上执行补全。实际的补全是由应用程序指定执行的。Bash尝试的补全操作会视文本为变量(如果文本以“$”开头),或为用户名(如果文本开头是“~”),或为主机名(如果文本开头为“@”),或为命令(包括别名和函数)。如果这些都没有匹配到,则尝试进行文件名补全。

possible-completions (M-?)

列出参考点之前的文本的可行补全。当显示补全时,Readline会将“completion-display-width”变量的值、“COLUMNS”环境变量的值或屏幕宽度设置为用于显示的列宽。

insert-completions (M-*)

在参考点之前插入所有可由“possible-completions”产生的文本补全。

menu-complete ()

类似于“complete”,但会从可行补全列表中匹配一个补全来代替将要补全的单词。重复执行“menu-complete”可遍历整个可行补全列表来轮流插入每一个匹配。在到达补全列表的末端时会响铃警告(这要看“bell-style”的设置)并且恢复到原始文本。参数n用于指定在匹配列表中向前移动n位;负数参数可用于在该列表中向后移动。该命令可绑定到TAB按键上,但默认是未绑定的。

menu-complete-backward ()

等同于“menu-complete”,但是是向后遍历可行补全列表,就像“menu-complete”使用了负数参数一样。

delete-char-or-list ()

如果光标不在行首或行尾,则删除光标处的字符(像“delete-char”一样)。如果光标位于行尾,其行为等同于“possible-completions”。默认情况下,该命令未绑定。

complete-filename (M-/)

试图对参考点之前的文本进行文件名补全。

possible-filename-completions (C-x /)

列出在参考点之前文本的可行文件名补全。

complete-username (M-~)

试图对参考点之前文本进行用户名补全。

possible-username-completions (C-x ~)

列出在参考点之前文本的可行用户名补全。

complete-variable (M-$)

试图对参考点之前文本进行shell变量名补全。

possible-variable-completion (C-x $)

列出在参考点之前文本的可行shell变量名补全。

complete-hostname (M-@)

试图对参考点之前文本进行主机名补全。

possible-complete-hostname (M-x @)

列出在参考点之前文本的可行主机名补全。

complete-command (M-!)

试图对参考点之前文本进行命令名补全。命令名补全会对要匹配的文本按顺序和别名、保留字、shell函数、shell内建命令和可执行程序进行匹配。

possible-command-completions (C-x !)

列出在参考点之前文本的可行命令名补全。

dynamic-complete-history (M-TAB)

试图对参考点之前的文本进行补全。其会拿在历史列表中的行与文本进行比较来匹配出可行补全。

dabbrev-expand ()

对参考点之前的文本试图进行菜单补全。其会拿在历史列表中的行与文本进行比较来匹配出可行补全。

complete-into-braces (M-{)

执行文件名补全并且插入用大括号括起来的对于shell可用的可行补全列表。参见3.5.1《大括号扩展》。

8.4.7 键盘宏(Keyboard Macros)

start-kbd-macro (C-x ()

开始将输入的字符保存到当前键盘宏中。

end-kbd-macro (C-x ))

停止将输入的字符保存到当前键盘宏中,并且保存这个宏定义。

call-last-kbd-macro (C-x e)

重新执行最后一个键盘宏定义。执行宏中记录的字符,就像从键盘输入的一样。

print-last-kbd-macro ()

使用符合“inputrc”文件格式打印最后一个键盘宏定义。

8.4.8 一些其它的命令(Some Miscellaneous Commands)

re-read-init-file (C-x C-r)

读取“inputrc”文件的内容,并且将其中的绑定和变量赋值与当前配置合并。

abort (C-g)

中断当前编辑命令并且敲响终端响铃(受“bell-style”设置的限制)。

do-lowercase-version (M-A, M-B, M-x, …)

如果“Meta”组合键字符“x”是大写,则运行该组合键小写字符所绑定的命令。如果“x”已经是小写的,则该行为是未定义的。

prefix-meta (ESC)

变换下一个输入的字符。该命令用于不带有“Meta”键的键盘。输入“ESC f”等同于输入“M-f”。

undo (C-_ 或 C-x C-u)

增量撤消。每行输入具有单独的记忆。

revert-line (M-r)

撤消在该行的所有变更。这就像执行足够多的“undo”命令使其回退到开始状态。

tilde-expand (M-&)

在当前单词上执行波浪号扩展。

set-mark (C-@)

在参考点设置标记点。如果给出数字参数,则标记点设置为那个位置。

exchange-point-and-mark (C-x C-x)

将参考点与标记点调换位置。当前光标位置设置为已保存的位置,并且旧的光标位置保存为标记点。

character-search (C-])

读取一个字符并且将参考点移动到该字符出现的下一个位置。负数计数参数会搜索之前出现的位置。

character-search-backward (M-C-])

读取一个字符并且将参考点移动到该字符之前出现的位置。负数计数参数会搜索之后出现的位置。

skip-csi-sequence ()

消耗一个已定义为像“Home”键或“End”键这样的多键序列来读取足够多的字符。这样的序列是以“控制序列指示符(CSI)”开头的,通常是“ESC-[”。如果该序列绑定到“\e[”,按键所产生这样的序列将不会有任何效果(除非显式绑定到一个readline命令上),而不是将零落的字符插入到编辑缓冲中。该命令默认是未绑定的,但一般会绑定到“ESC-[”上。

insert-comment (M-#)

在不带有数字参数时,会将变量“comment-begin”的值插入到当前行的开头。如果提供了数字参数,该命令作为开关进行动作:如果在行首的字符没有匹配到“comment-begin”的值,则插入该变量值;否则,将在行首删除出现在“comment-begin”中的字符。不论是哪种情况,都会接受该行的输入,就像按下换行了一样。“comment-begin”的默认值会使该命令将当前行变为shell注释。如果数字参数使注释字符移除了,则该行命令会被shell执行。

dump-functions ()

在Readline输出流中打印所有的函数和其按键绑定。如果提供了数字参数,输出会以能够作为“inputrc”文件的格式显示。该命令默认未绑定。

dump-variables ()

在Readline输出流中打印所有可设置的变量及其值。如果提供了数字参数,输出会以能够作为“inputrc”文件的格式显示。该命令默认未绑定。

dump-macros ()

打印所有绑定到宏的Readline按键序列和其输出的字符串。如果提供了数字参数,输出会以能够作为“inputrc”文件的格式显示。该命令默认未绑定。

glob-complete-word (M-g)

视参考点之前的单词为一个文件名扩展的样式,其隐式追加一个星号。该样式用于产生可行补全的文件名匹配列表。

glob-expand-word (C-x *)

视参考点之前的单词为一个文件名扩展的样式,并且插入匹配的文件名列表来代替该单词。如果提供数字参数,在文件名扩展之前追加一个星号“*”。

glob-list-expansions (C-x g)

显示由“glob-expand-word”所产生的扩展列表,并且刷新该行。如果提供了一个数字参数,在文件名扩展之前追加一个星号“*”。

display-shell-version (C-x C-v)

显示当前Bash实例的版本信息。

shell-expand-line (M-C-e)

扩展当前行,就像shell扩展的一样。其执行别名和命令历史扩展和所有的shell单词扩展(参见3.5《shell扩展》)。

history-expand-line (M-^)

在当前行执行历史扩展。

magic-space ()

在当前行执行历史扩展并且插入一个空格(参见9.3《历史交互》)。

alias-expand-line ()

在当前行执行别名扩展(参见6.6《别名》)。

history-and-alias-expand-line ()

在当前行执行历史和别名扩展。

insert-last-argument (M-. 或 M-_)

“yank-last-arg”的代名词。

edit-and-execute-command (C-x C-e)

在当前命令行调用一个编辑器,并且将编辑结果作为shell命令执行。Bash会按顺序试图调用$VISUAL、$EDITOR和emacs作为编辑器。