zsh 完成路径中的所有可执行文件

zsh 完成路径中的所有可执行文件

我编写了一个脚本,它本身将我的 $PATH 中的任意可执行文件作为参数。有没有办法创建一个 zsh(或 bash)完成函数,这样我就可以输入myFunc to[Tab],它就会完成myFunc top例如?最好只选择具有可执行权限的文件,但将任何文件都放在 $PATH 中会很有帮助!

我无法想象系统会有什么影响,但它将在 Linux、BSD 和 Mac 上运行。

谢谢!

答案1

zshPATH具有针对named中命令的补全功能。你可以运行_path_commands以下命令来配置补全功能:myFunc

compdef _path_commands myFunc

笔记:这要求zsh 完成系统初始化。通常(由 设置compinstall)这发生在您~/.zshrc

# some zstyle configurations

autoload -Uz compinit
compinit

任何对的调用都compdef需要在之后进行compinit。如果在运行时收到“未找到命令”错误compdef,我建议使用设置完成系统compinstall

笔记:为了安全起见,如果 $fpath 中的任何目录是全球可写的,zsh 将抛出错误。如果您收到错误:

zsh compinit:不安全的目录,对列表运行 compaudit。忽略不安全的目录并继续 [y] 或中止 compinit [n]?

不要简单地按 y,而是按 n,然后compaudit | xargs chmod g-w按照建议尝试https://stackoverflow.com/questions/13762280/zsh-compinit-insecure-directories

相关内容