当我在 bash 终端中按 4 次转义键时,它会显示如下内容:
-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen
这个功能是什么?如何找到这些条目? (第二次按下 esc 时,终端会发出声音警报。)
答案1
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete
由此可见,Emacs命令行编辑模式下默认的Meta+Esc(and Ctrl+i)键绑定是Readline函数complete
。该Meta键通常位于Esc键盘上,没有明确的Meta键。该函数的 Readline 文档说
尝试对点之前的文本执行补全。实际执行的完成是特定于应用程序的。例如,Bash 尝试依次将文本视为变量(如果文本以 开头
$
)、用户名(如果文本以 开头~
)、主机名(如果文本以 开头)或命令(包括别名和函数)来完成。@
如果这些都没有产生匹配,则尝试完成文件名。另一方面,Gdb 允许完成程序函数和变量,并且仅在某些情况下尝试完成文件名。
关于您的评论安东的回答:不,按Esc两次与一般按不同Tab(除非它在将它们映射到同一操作的程序中,就像 Readline 默认情况下那样)。然而Ctrl+i 是一样Tab,就像Ctrl+[一样Esc。这意味着您可以根据需要使用Ctrl+[ Ctrl+[in完成补全bash
,只要 doubleEsc绑定到 Readlinecomplete
函数即可。例如,如果您在缺少 Escape 键的 VT220 终端上工作,这会很方便:
答案2
这就是所谓的文件完成,如果命令行上没有任何前面的命令,bash 将让您完成它所知道的所有 2837 个命令,包括内置命令和在您的文件中找到的命令。PATH
按排序顺序呈现