我编写了一个脚本,它本身将我的 $PATH 中的任意可执行文件作为参数。有没有办法创建一个 zsh(或 bash)完成函数,这样我就可以输入myFunc to[Tab]
,它就会完成myFunc top
例如?最好只选择具有可执行权限的文件,但将任何文件都放在 $PATH 中会很有帮助!
我无法想象系统会有什么影响,但它将在 Linux、BSD 和 Mac 上运行。
谢谢!
答案1
zsh
PATH
具有针对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