8.4 可绑定的 Readline 命令

评论 0 浏览 0 2023-01-26

本节描述了可以与按键序列绑定的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)

无论光标在哪里,都接受这一行。 如果这一行是非空行,则根据HISTCONTROLHISTIGNORE变量的设置将其添加到历史列表中。 如果这一行是修改过的历史行,则将历史行恢复到原来的状态。

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-wordshell-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,并拉出新的顶部。只有当前面的命令是yankyank-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产生的文本的完成度。

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-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$EDITORemacs作为编辑器。

最后更新2023-03-17
0 个评论