zsh自动完成,基于第一个参数的第二个参数
我需要自动完成一个函数的两个参数,其中第二个参数取决于第一个参数 例如:函数“foo”的第一个参数的值可以是“a”或“b”。如果第一个参数为“a”,则第二个参数可以具有值“10”或“11”;如果第一个参数为“b”,则第二个参数可以具有值“20”和“21”。因此,以下参数组合是合法的:zsh自动完成,基于第一个参数的第二个参数,zsh,zsh-completion,Zsh,Zsh Completion,我需要自动完成一个函数的两个参数,其中第二个参数取决于第一个参数 例如:函数“foo”的第一个参数的值可以是“a”或“b”。如果第一个参数为“a”,则第二个参数可以具有值“10”或“11”;如果第一个参数为“b”,则第二个参数可以具有值“20”和“21”。因此,以下参数组合是合法的: foo a 10 foo a 11 foo b 20 foo b 21 组合是预先已知的(可以硬编码) 这个问题很模糊,伟大的人也没有解决我的问题。最接近的方法是使用\u参数,可能是与状态操作一起使用,但我没有设
foo a 10
foo a 11
foo b 20
foo b 21
组合是预先已知的(可以硬编码)
这个问题很模糊,伟大的人也没有解决我的问题。最接近的方法是使用
\u参数
,可能是与状态操作一起使用,但我没有设法使其起作用。\u参数
如果您将选项与您描述的参数混合在一起,则会有意义。否则,只需在$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
我用以下方法解决了我的问题:
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