ZSH 选项卡完成:仅完整文件而不是二进制文件

ZSH 选项卡完成:仅完整文件而不是二进制文件

是否可以制作自定义 zsh 完成文件,以便在点击文件名选项卡时避免完成二进制文件?例如,我有 2 个文件,myprogram.c 和 myprogram,二进制文件,是否有可能当我执行 vim myprog(tab) 时它会自动完成为 myprogram.c,而不是 myprogram?提前致谢!

答案1

您可以通过调整来忽略完成中的某些模式完成样式zstyle内置。有zsh 指南中的示例

例如,要*.o在使用 vim 完成要编辑的文件时忽略文件,您可以将其放入您的.zshrc

zstyle ':completion:*:*:vim:*:*files' ignored-patterns '*.o'

这无法以有用的方式排除可执行文件。您可以排除*~*.*,或更准确地说(|*/)[^/.]##,但这排除了每个不包含 的文件名.,包括脚本甚至更糟糕的目录。据我所知,完成忽略机制无法检查文件是否存在或类型,它只是匹配文本模式。

答案2

您当然可以对此进行修改,以便它适用于任何给定的文件夹或文件集,但首先您应该了解它现在不这样做的原因。

在Linux上,文件扩展名并不重要,唯一重要的是执行位。无论是真正的二进制文件还是脚本形式的文本,都可以执行。您的“不是二进制文件”标准与 Linux 关于文件是什么或不是文件的区别不太相符。

话虽这么说,编写自定义完成函数来替换给定命令的文件名 glob 完成功能并不会太难,该命令将列出所有文件,但排除具有“.c”版本的文件。这需要一些开销,这会稍微减慢选项卡的完成速度。

相关内容