[英]Can I make tab-completion filter files by extension?
假设myprogram
仅使用*.data
文件作为命令行参数。 在终端,当我们这样做
$ myprogram <tab>
我们只希望列出*.data
文件以供选项卡自动完成。 这种行为是如何实现的? 正在使用的shell是Bash。
在bash shell中键入以下内容
complete -f -X '!*.data' myprogram
-f
选项告诉complete
仅基于文件名而不是目录完成。 -X
选项允许您指定过滤器模式。
注意:此解决方案是全球性的。 它会影响每个目录和每个命令的tab-completion(意思是像cd
或rm
这样的东西,以及myprogram
)。 它的工作原理是允许您指定不会出现在tab-complete中的文件扩展名。 这不完全是您要求的,但如果您的工作目录中除了*.data
之外没有多少文件,则排除所有选项不会太麻烦。 由于这两个原因,这个选项可能不是你想要的,但仍然值得注意。
在~/.bash_profile
文件中添加该行
FIGNORE=".py:.txt:.out:.exe:.c:<etc>"
其语法是创建一个以冒号分隔的要忽略的文件扩展名列表。 保存新的.bash_profile
您必须键入. ~/.bash_profile
. ~/.bash_profile
表示您所做的更改生效。
有关完整命令的更多信息,请参阅Bash手册中的Programmable Completion Builtins 。
更好地使用_filedir
而不是“raw” complete
。
理由
grep _filedir -r $(pkg-config --variable=completionsdir bash-completion) | wc -l
~
)路径正在扩展 /home/tux/Do<TAB><TAB>
,作为回复获得的列表将删除'/ home / tux',因此更加紧凑 MWE
写一个文件“completions / myprogram”,你可以找到它. completions/myprogram
. completions/myprogram
。 内容:
_myprogram()
{
# init bash-completion's stuff
_init_completion || return
# fill COMPREPLY using bash-completion's routine
_filedir '@(data)'
}
complete -F _myprogram myprogram
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.