重击:按逃逸键4次


11

当我在bash终端中按4次ESC键时,它显示如下:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

此功能是什么?如何找到这些条目?(在第二次ESC键上,终端会发出声音警报。)

Answers:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

这表明Emacs命令行编辑模式下Meta+Esc(和Ctrl+i)的默认键绑定是Readline函数complete。该Meta键通常Esc在没有显式Meta键的键盘上。该功能的Readline文档说

尝试对点之前的文本执行补全。实际执行的完成是特定于应用程序的。例如,Bash尝试依次完成将文本视为变量(如果文本以开头$),用户名(如果文本以开头 ~),主机名(如果文本以开头@)或命令(包​​括别名和函数)。如果没有一个匹配项,则尝试完成文件名。另一方面,Gdb允许完成程序功能和变量,并且仅在某些情况下才尝试完成文件名。


关于您对Anthon答案的评论:不,按Esc两次与Tab通常按不一样(除非它在程序中将它们映射到相同的动作,如Readline缺省)。但是Ctrl+i 一样的Tab,就像Ctrl+[是一样的Esc。这意味着,只要将Double 绑定到Readline 函数,就可以使用Ctrl+[ Ctrl+[in 来完成。例如,如果您在缺少Escape键的VT220终端上工作,这将很方便:bashEsccomplete

德国VT220键盘


Kusalananda,谢谢您的深入回答。关于最后一点:如果两次都完成操作,为什么Esc两次按(或\M-\e)键与Tabbash 相同?
flow2k

1
@ flow2k如果Esc-Esc和Tab都绑定到该complete函数,则它们是相同的,它们在默认情况下是默认的,但通常不是这样(即,按键不“相同”)。您不能在所有地方都用Esc-Esc代替Tab,仅在具有readline功能的程序中。但是,您可以在任何地方用Ctrl-i代替Tab或用Ctrl- [代替Esc。
库沙兰丹

如果可以的话,可以进行后续操作:Tab在的输出中看不到bind -p。这是为什么?也许因为Tab是“硬编码的”并且无法绑定?
flow2k

1
@ flow2k否,Tab Ctrl-i 相同。寻找\C-i。这在硬件级别上是等效的。
库萨兰达

8

这称为文件完成,如果您在命令行上没有任何前面的命令,bash将为您提供它了解的所有2837条命令,包括内置命令和在您的命令中找到的命令。 PATH

的排列顺序是


1
有趣-这与两次按Tab键相同。也许2个转义符= 1个制表符?
flow2k
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.