我可以按住键仅按 Tab 键完成文件夹

我可以按住键仅按 Tab 键完成文件夹

假设我有一个像这样的目录:

 foo/
   bar.js
   bar/

如果我cd进入 foo 然后输入“ba”然后点击选项卡,我将无法完成,因为文件名与文件夹重叠。

是否有一个我可以用选项卡按住的键,它只会给我文件夹(或文件?)

答案1

TL,DR:添加. /etc/bash_completion到您的.bashrc.

为了回答您提出的确切问题,没有这样的内置命令。 bash 有命令完成各种类型的对象(文件名、用户名、变量名等),但不限于目录。

但是,除非您运行的是 bash 的古董版本,否则您可以使用上下文相关的完成,这是 2000 年发布的 2.04 版本中添加的功能。一些发行版默认启用它;对于其他人,您需要安装bash-completion打包并在您的~/.bashrc.大多数发行版提供了一个名为 的包bash-completion并将激活脚本放入其中/etc/bash_completion,即您.bashrc应该包含以下行

. /etc/bash_completion

此后,如果您输入cd并按Tab,则只会完成目录名称。

如果你有一个非古老版本的bash(≥4.0),你可以输入shopt -s autocd你的.bashrc,然后你可以省略该cd命令,这样你就可以只写bar而不是cd bar.制表符补全将在该行的第一个单词上补全$PATH当前目录中的命令名称和目录名称(以及)。$CDPATH

Bash 4.0 还允许您编写自己的命令行版本函数(早期版本也可以,但您必须跳过障碍)。所以如果你真的想要你可以这样做。如何自定义 Bash 命令补全?有一个相对复杂的例子;搜索READLINE_LINEcomplete找到其他示例。

答案2

键入后没有得到任何补全的原因ba是因为您没有bacd命令前面输入命令。 Bash 意识到输入bar.js<ENTER>和键入都没bar<ENTER>有意义(一个是目录,而另一个文件bar.js不在其中$PATH和/或没有可执行权限集),因此它根本不会给您任何补全。

但是,如果您在目录名称前面加上cd,bash 将看到bar合适的内容,而没有其他名称可以看到合适的内容,并且将执行完整的完成:

$ ls
bar  bar.js
$ cd <TAB>

此时提示符将转变为

$ cd bar/ # This line

相关内容