修改 bash 自动完成规则以排除特定文件名

修改 bash 自动完成规则以排除特定文件名

我想修改现有的vibash 自动完成规则以排除某些文件名(例如文件config.log)。我尝试使用FIGNORE环境变量,但没有成功。使用complete内置规则会覆盖现有规则,而不是修改它。

有什么办法可以做到这一点吗?

答案1

要从 bash 补全中排除无用的文件名或扩展名,请将此行添加到您的 .bashrc 文件中:

FIGNORE=".log:.dvi:.pdf:"

答案2

您可以使用以下命令查看当前配置

complete -p vi
complete -o bashdefault -o default -o filenames -o nospace -F _exp_ vi

以及所使用的 shell 函数的定义

type _exp_

有一个complete功能/选项-X允许过滤结果。问题是这仅适用于complete动作。它不适用于-o default结果(我不知道-o bashdefault)。

您可以更改compspec:

complete -d -f -o filenames -o nospace -F _exp_ -X '@(config.log|config.doc)' vi

不幸的是

  1. -X通话中只能有一个complete(之前的会被覆盖)

  2. 您需要shopt -s extglob上述内容才能发挥作用;否则你只能使用一个名称或模式 ( "*.log")

相关内容