我需要自动完成一个函数的两个参数,其中第二个参数取决于第一个参数。
一个例子:函数的第一个参数" foo"可以具有" a"的值或" b"。第二个参数可以有值" 10"或" 11"如果第一个参数是" a"和" 20"和" 21"如果第一个参数是" b"。因此,以下参数组合是合法的:
foo a 10
foo a 11
foo b 20
foo b 21
这些组合是预先知道的(它们可以是硬编码的)。
zsh completion system doc非常模糊,伟大的How To也没有解决我的问题。最接近的是使用_arguments
,可能是国家行动,但我没有设法让它发挥作用。
答案 0 :(得分:1)
_arguments
会有意义。否则,只需在$words
数组中查找上一个单词 - 例如:
if (( CURRENT == 1 )); then
_wanted letters expl letter compadd a b
else
case $words[1] in
a) numbers=( 10 11 ) ;;
b) numbers=( 20 21 ) ;;
esac
_wanted numbers expl number compadd -a numbers
fi
答案 1 :(得分:0)
我用以下方法解决了我的问题:
IFS='
'
local -a options
_arguments "1:first:->first" "*:next:->next"
case "$state" in
first)
for o in $(_command_to_autocomplete_first); do
options+=("$o")
done
_describe 'values' options
;;
next)
for o in $(_command_to_complete_others $words[2]); do
options+=("$o")
done
_describe 'values' options
;;
esac