8.4 可绑定的 Readline 命令
本节描述了可以与按键序列绑定的Readline命令。 你可以通过执行bind -P
来列出你的按键绑定,或者,对于一个更简洁的格式,适合inputrc文件,bind -p
。(见4.2 Bash的内置命令。)没有附带键序的命令名默认为不绑定。
在下面的描述中,point指的是当前的光标位置,而mark指的是由set-mark
命令保存的光标位置。 点和标记之间的文字被称为区域。
1 移动命令
beginning-of-line (C-a)
移动到当前行的起始处。
end-of-line (C-e)
移动到线的末端。
forward-char (C-f)
向前移动一个字符。
backward-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 ()
刷新当前行。默认情况下,这是未绑定的。
2 操纵历史的命令
accept-line (Newline or Return)
无论光标在哪里,都接受这一行。 如果这一行是非空行,则根据
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)
在 point 处插入前一个命令的第一个参数(通常是上一行的第二个单词)。使用参数 n,插入前一个命令的第 n 个单词(前一个命令中的单词以单词 0 开头)。负参数插入前一个命令末尾的第 n 个单词。一旦参数 n 被计算出来,参数就被提取出来,就好像已经指定了 '!n' 历史扩展一样。
yank-last-arg (M-. or M-_)
将最后一个参数插入到上一个命令(上一个历史条目的最后一个词)。使用数字参数,其行为与 yank-nth-arg 完全相同。对 yank-last-arg 的连续调用在历史列表中向后移动,依次插入每行的最后一个单词(或第一次调用的参数指定的单词)。提供给这些连续调用的任何数字参数都决定了在历史中移动的方向。一个否定的论点会改变历史的方向(向后或向前)。历史扩展工具用于提取最后一个参数,就好像已经指定了“!$”历史扩展一样。
operate-and-get-next (C-o)
接受当前行以返回调用应用程序,就好像输入了换行符一样,并从历史记录中获取相对于当前行的下一行以进行编辑。如果提供了数字参数,则指定要使用的历史条目而不是当前行。
fetch-history ()
使用数字参数,从历史列表中获取该条目并使其成为当前行。没有参数,返回到历史列表中的第一个条目。
3 更改文本的命令
end-of-file (usually C-d)
表示文件结束的字符,例如由
stty
设置。如果在行上没有字符时读到这个字符,而点在行的开头,Readline将其解释为输入的结束,并返回EOF。delete-char (C-d)
删除该点的字符。如果这个函数与tty EOF字符绑定在一起,如C-d一般,其效果见上文。
backward-delete-char (Rubout)
删除光标后面的字符。数字参数意味着杀死字符而不是删除它们。
forward-backward-delete-char ()
删除光标下的字符,除非光标在行尾,在这种情况下,光标后面的字符被删除。默认情况下,这并不与一个键绑定。
quoted-insert (C-q or C-v)
将输入的下一个字符逐字逐句地添加到该行。例如,这就是插入C-q这样的按键序列的方法。
self-insert (a, b, A, 1, !, …)
插入自己的名字。
bracketed-paste-begin ()
这个函数旨在与某些终端发送的"括号内的粘贴"转义序列绑定,这样的绑定是默认分配的。 它允许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
绑定的字符会将点之前的字符替换成一个空格。默认情况下,这个命令是不受约束的。
4 删除和拉回
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 ()
删除点周围的所有空格和制表符。默认情况下,这是不绑定的。
kill-region ()
删除当前区域内的文本。 默认情况下,这个命令是不绑定的。
copy-region-as-kill ()
将区域中的文本复制到 kill 缓冲区,以便可以立即将其抽出。默认情况下,此命令未绑定。
copy-backward-word ()
将 point 之前的单词复制到 kill 缓冲区。单词的边界与
backward-word
相同。 默认情况下,这个命令是不受约束的。copy-forward-word ()
复制point后面的单词到kill buffer。单词的边界与
forward-word
相同。 默认情况下,该命令是不绑定的。yank (C-y)
将kill ring的顶部拉到缓冲区的点上。
yank-pop (M-y)
旋转kill-ring,并拉出新的顶部。只有当前面的命令是
yank
或yank-pop
时,你才能这样做。
5 指定数字参数
digit-argument (M-0, M-1, … M--)
把这个数字加到已经累积的参数上,或者开始一个新的参数。M--开始一个负数参数。
universal-argument ()
这是另一种指定参数的方式。 如果这条命令后面有一个或多个数字,可以选择前面的减号,这些数字就定义了参数。 如果这条命令后面有数字,再次执行
universal-argument
就会结束数字参数,但其他情况下会被忽略。作为一种特殊情况,如果这个命令后面紧跟着一个既不是数字也不是减号的字符,那么下一个命令的参数数就会乘以4。 参数数最初是1,所以第一次执行这个函数会使参数数变成4,第二次执行会使参数数变成16,以此类推。 默认情况下,这个命令不与一个键绑定。
6 让Readline为你打字
complete (TAB)
尝试对点之前的文本进行补全。 实际进行的补全是特定于应用程序的。 Bash尝试将文本依次作为变量(如果文本以‘$’开头)、用户名(如果文本以‘~’开头)、主机名(如果文本以‘@’开头)或命令(包括别名和函数)来补全。如果这些都没有产生匹配,就会尝试完成文件名。
possible-completions (M-?)
列出点之前文本的可能完成情况。 当显示完成情况时,Readline将用于显示的列数设置为
completion-display-width
的值、环境变量COLUMNS
的值或屏幕宽度,依次为completion-display-width
的值。insert-completions (M-*)
在点之前插入所有会由
possible-completions
产生的文本的完成度。类似于
complete
,但从可能的补语列表中替换要补的字。 重复执行menu-complete
,在可能的补语列表中依次插入每个补语。 在补语列表的末尾,铃声被敲响(取决于bell-style
的设置),原始文本被恢复。一个n的参数在匹配列表中向前移动n个位置;一个负的参数可以用来在列表中向后移动。 这个命令打算与TAB绑定,但默认是不绑定的。与
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-completions (C-x $)
列出点之前的文本的可能完成情况,将其作为一个壳变量。
complete-hostname (M-@)
在点之前的文本上尝试完成,将其视为一个主机名。
possible-hostname-completions (C-x @)
列出点之前的文本的可能完成情况,将其作为一个主机名来处理。
complete-command (M-!)
在点之前的文本上尝试完成,把它当作一个命令名。命令完成试图将文本与别名、保留词、shell函数、shell内置程序以及最后的可执行文件名相匹配,依次进行。
possible-command-completions (C-x !)
列出点之前的文本的可能完成情况,把它当作一个命令的名称。
dynamic-complete-history (M-TAB)
在点之前的文本上尝试完成,将文本与历史列表中的行进行比较,以寻找可能的完成匹配。
dabbrev-expand ()
在点之前的文本上尝试完成菜单,将文本与历史列表中的行进行比较,以寻找可能的完成度匹配。
complete-into-braces (M-{)
执行文件名补全,并在大括号内插入可能的补全列表,以便该列表可供shell使用(见Brace Expansion)。
7 键盘宏
start-kbd-macro (C-x ()
开始保存输入到当前键盘宏中的字符。
end-kbd-macro (C-x ))
停止保存输入到当前键盘宏中的字符,并保存该定义。
call-last-kbd-macro (C-x e)
重新执行上次定义的键盘宏,使宏中的字符看起来就像在键盘上键入的一样。
print-last-kbd-macro ()
以适合inputrc文件的格式,打印最后一个定义的键盘宏。
8 一些杂项命令
re-read-init-file (C-x C-r)
读取inputrc文件的内容,并纳入其中发现的任何绑定或变量赋值。
abort (C-g)
放弃当前的编辑命令,并敲响终端的铃声(以
bell-style
的设置为准)。do-lowercase-version (M-A, M-B, M-x, …)
如果metafied字符x是大写字母,则运行与相应metafied小写字母绑定的命令。 如果x已经是小写字母,则该行为未被定义。
prefix-meta (ESC)
对输入的下一个字符进行metafy。这适用于没有元键的键盘。输入‘ESC f’相当于输入M-f。
undo (C-_ or 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等键定义的序列。如果这个序列被绑定到"\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文件的一部分。该命令默认为非绑定。
spell-correct-word (C-x s)
对当前单词进行拼写纠正,将其视为目录或文件名,方法与
cdspell
shell选项相同。 字的边界与shell-forward-word
使用的边界相同。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单词扩展(见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-. or M-_)
是
yank-last-arg
的同义词。edit-and-execute-command (C-x C-e)
在当前命令行上调用一个编辑器,并将结果作为shell命令来执行。 Bash试图按顺序调用
$VISUAL
、$EDITOR
和emacs
作为编辑器。