我调用了一个程序luarocks
,其中包含一系列子命令,例如build
、install
和make
,其后带有标志。最后,命令如下:
# luarocks install varargs --server=https://example.com/`
$ luarocks make ./varargs.rockspec
$ luarocks pack ./varargs.rockspec
zsh autocomplete 命令_arguments
能够获取诸如-s
和之类的标志列表,--long
并为它们创建描述,如下所示:
_arguments "-s[short flag]" "--long[long flag]"
install
但是,如果命令中包含类似的子命令,则此方法效果不佳,因此当您键入 时luarocks install <tab>
,不会出现标志列表。如何让_argument
忽略未包含在标志列表中的任何子命令?
作为参考,这是我当前的代码:
#compdef luarocks
local curcontext="$curcontext" state line
typeset -A opt_args
local -a lr_commands
lr_commands=(
build config doc
download help install lint
list make new_version pack
path purge remove search
show unpack upload write_rockspec
)
local -a generic_args
generic_args=(
"--long[long]"
"-s[short]"
)
_arguments \
'1: :->cmd'\
'*: :->args'
case $state in
cmd)
_arguments "1:Commands:($lr_commands)"
;;
args)
_arguments $generic_args
;;
esac