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

Mat*_*ine 6 bash autocomplete

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

有没有办法做到这一点?

小智 9

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

FIGNORE=".log:.dvi:.pdf:"
Run Code Online (Sandbox Code Playgroud)


Hau*_*ing 4

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

complete -p vi
complete -o bashdefault -o default -o filenames -o nospace -F _exp_ vi
Run Code Online (Sandbox Code Playgroud)

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

type _exp_
Run Code Online (Sandbox Code Playgroud)

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

您可以更改compspec:

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

不幸的是

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

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