在zsh完成中调用自定义函数?

在zsh完成中调用自定义函数?,zsh,zsh-completion,Zsh,Zsh Completion,我似乎想不出一种方法来调用zsh完成函数,我可以利用它来提供可用项的返回结果。例如,我希望能够调用一个web服务并返回一个潜在的数组 我试过这样的方法: #compdef test local arguments _run(){ reply=(1 2 3) } arguments=( '--test[foo]:bar:_run' ) _arguments -s $arguments 如果我在\u run函数中添加了一个echo,我可以看到它正在执行,但是zsh总是说没有匹配项

我似乎想不出一种方法来调用zsh完成函数,我可以利用它来提供可用项的返回结果。例如,我希望能够调用一个web服务并返回一个潜在的数组

我试过这样的方法:

#compdef test

local arguments


_run(){
    reply=(1 2 3)
}

arguments=(
'--test[foo]:bar:_run'
)

_arguments -s $arguments

如果我在
\u run
函数中添加了一个echo,我可以看到它正在执行,但是zsh总是说没有匹配项

我花了一段时间才弄清楚这一点(只是因为我从
brew
zsh完成文件中偷了它:

#compdef test

local arguments

_run(){
    val=(1 2 3)
    _wanted val expl "Items" compadd -a val
}

_biz(){
    val=(4 5 6)
    _wanted val expl "Biz" compadd -a val
}

local expl
local -a val

arguments=(
'--test[foo]:bar:_run'
'--biz[boo]:boo:_biz'
)

_arguments $arguments
现在你可以做了

$ test --test
 -- Items --
 1  2  3

$ test --test 2 --biz 4
-- Biz --
4  5  6