我想为具有单个形式参数的命令设置 zsh 补全scheme:parameter
。
假设我有可以返回所有可能的方案和所有可能的参数的命令。从方案列表完成直到键入冒号,然后从参数列表完成的完成函数是什么?
从单个列表完成很简单,例如:
function _prmt() { _alternative 'args:args:($(prmt --completions))' }
但我不知道如何让它识别分隔符。
答案1
一种方法是寻找:
并表现出不同的行为,例如取决于:
#compdef foo
# put this file into a $fpath directory (typically one you create
# and prefix to that array) then `rm ~/.zcompdump && exec zsh`
# until work-making (a temporary `print -z "foo "` in your .zshrc
# may also speed debugging, as then you can go directly to the
# mashing-of-tab stage)
local curcontext="$curcontext" state line
local suf
typeset -A opt_args
_arguments -C -s \
'1: :->dofoo' \
&& return 0
case "$state" in
dofoo)
if compset -P '*[:]'; then
_values "parameters" $(_call_program getparam ls /)
else
if compset -S '[:]*'; then
suf=()
else
suf=( -qS ':' )
fi
_wanted "schemes" expl "scheme" compadd $suf[@] $(_call_program getscheme ls /)
fi
;;
esac
这些ls /
位将需要是您适当的命令,可能还需要额外的复杂性才能将输出正确地拆分为列表,具体取决于这些程序发出的内容等。
我是如何学到这一点的:主要是然后特别是在和完成cd $fpath[-1]
部分中进行探索,其中有完成处理。_chown
_users
:
更多信息。