我想修改现有的vi
bash 自动完成规则以排除某些文件名(例如文件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
不幸的是
-X
通话中只能有一个complete
(之前的会被覆盖)您需要
shopt -s extglob
上述内容才能发挥作用;否则你只能使用一个名称或模式 ("*.log"
)