某些命令如何更改选项卡式自动完成条件?

某些命令如何更改选项卡式自动完成条件?

假设我在这样的目录中:

:我的目录$ ls

foo.txt

那唯一的文件。如果我键入类似的命令cat,然后按 Tab 键自动完成(假设 ‸ 字符实际上是插入符号位置,而不是用于此目的的字符)...

:mydirectory$ 猫 ‸

更改为(再次强调:这里的 ‸ 不是字符而是插入符号)...

:mydirectory$ cat foo.txt ‸

但对于这样的命令来说就不一样了:

:我的目录$ tar ‸

当我点击选项卡时,我会看到自动完成的选项:

A c d r t u x

当写这样的东西时:

:mydirectory$ tar -zxvf ‸

然后什么都不会自动完成。

我的问题是:许多命令如何更改 bash 中的自动完成规则?

答案1

命令不会更改自动完成规则。自动完成规则是使用脚本和函数为 shell 定义的,并在 shell 启动时加载。我将使用它bash作为示例,因为我比其他 shell 更熟悉它。

自动完成 in 的规则bash在 in 脚本中定义/etc/bash_completion,并由目录中的其他脚本补充/etc/bash_completion.d/。这些规则是bash在您登录时获取的。

bash有一个complete命令可以让您轻松定义完成规则。要查看已定义的所有规则,您可以运行complete -p.

现在,大多数发行版已经为您定义了这些规则。因此,当您键入 时tar <TAB>,您的发行版已经定义了一条规则,用于将与模式*.tar*tar命令选项匹配的文件显示为自动完成建议。这就是为什么当您键入 时tar,它会为您提供选项A c d r t u x,但对于tar -zvxf,它不会为您提供选项,因为之后就没有其他选项了。现在,如果您在该目录中输出一个.tar.gz文件,它会建议将其作为自动完成选项,因为该f选项之后的下一个内容是 tar 文件。

默认情况下/etc/bash_completion不提供选项作为建议,也不过滤文件类型。在这种情况下,您还将看到该foo.txt文件作为对 的建议tar

您可以在此处阅读有关创建自己的规则的信息 -https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1https://debian-administration.org/article/317/An_introduction_to_bash_completion_part_2

相关内容