zsh-completion:完成参数的两个部分,用冒号分隔

zsh-completion:完成参数的两个部分,用冒号分隔

我想为具有单个形式参数的命令设置 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:更多信息

相关内容