在我的 Debian 服务器上,我习惯于点击 Tab 来“预览”shell 模式的扩展:
$ cp *some*<Tab>
something somewhat have-some-cake
$ cp *some*_
当模式扩展为一个条目时,Tab 将模式替换为实际条目;否则它会显示匹配条目的列表。这是直观且有用的,因为它与常规的“前缀”制表符补全一致。
但是我的 Ubuntu 服务器和桌面的行为不同:即使它扩展到多个条目,Tab 也会用第一个条目替换模式。
我检查了通常的嫌疑人(/etc/bash.bashrc、/etc/inputrc 和本地版本),但找不到任何区别。
有人知道哪个设置控制这种行为吗?
与另一个答案相反,这个特殊问题可能是使用 bash-completion 的直接结果。bash-completion 包有几个错误(例如,如U&L关于类似问题的回答中所述)。
如果我在我的
.bashrc
:并启动一个新的 bash 实例,然后我得到:
然后,如果我
/usr/share/bash-completion/bash_completion
像在以下位置一样获取脚本.bashrc
:*o*
立即自动完成,而不foo
显示其他匹配项。顺便说一句,我正在使用 16.04。我不知道这是否已在较新版本中得到修复。
Bash 中更智能的选项卡完成需要该
bash-completion
软件包。Bash Completion实际上是由 Debian 直接编写和维护的。
(另见它的Debian 包和Ubuntu 包页面。)
安装后,它会自动加载(例如 via
/etc/bash.bashrc
),否则您需要指示 Bash~/.bashrc
使用如下节将其加载到您的文件中:在 Red Hat 和其他人包含这个包之前,我曾经在系统之间手动复制
/etc/bash_completion*
。这会很好用,但我不建议这样做;它还切断了您的包管理器更新现有完成并安装新完成的机会(/usr/share/bash-completion/completions/
尽管它们最初与您的自定义完成一起存在,但现在进入了/etc/bash_completion.d/
)。