サブコマンドの後のオートコンプリートフラグ

サブコマンドの後のオートコンプリートフラグ

、、などluarocksの一連のサブコマンドとフラグを含むプログラムを呼び出します。最後に、コマンドは次のようになります。buildinstallmake

# 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

関連情報