3

所以我不确定这是否与 optparse-applicative 的脚本有问题,或者我是否使用错误。

在 optparse-applicative自述文件中,它指出程序可以通过自动完成脚本获得,并带有 zsh 选项。对于我的程序setup

$> setup --zsh-completion-script `which setup`

输出:

#compdef setup

local request
local completions
local word
local index=$((CURRENT - 1))

request=(--bash-completion-enriched --bash-completion-index $index)
for arg in ${words[@]}; do
  request=(${request[@]} --bash-completion-word $arg)
done

IFS=$'\n' completions=($( /Users/anrothan/.local/bin/setup "${request[@]}" ))

for word in $completions; do
  local -a parts

  # Split the line at a tab if there is one.
  IFS=$'\t' parts=($( echo $word ))

  if [[ -n $parts[2] ]]; then
     if [[ $word[1] == "-" ]]; then
       local desc=("$parts[1] ($parts[2])")
       compadd -d desc -- $parts[1]
     else
       local desc=($(print -f  "%-019s -- %s" $parts[1] $parts[2]))
       compadd -l -d desc -- $parts[1]
     fi
  else
    compadd -f -- $word
  fi
done

我在我的 zshrc 中运行以下内容(我使用了 oh-my-zsh,但我删除了它,这仍然发生在一个最低限度的配置中,只添加了一个小的 PATH 来获取setup脚本)。

autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
source <(setup --zsh-completion-script `which setup`)

我多次收到以下错误:

/dev/fd/11:compadd:24: can only be called from completion function

我已经运行compinit了,完成脚本对我来说似乎是正确的,我环顾四周,但我似乎无法弄清楚为什么会发生这个错误......

4

1 回答 1

1

您不需要 source zsh-completion 脚本,只需将它们添加到您的 fpath 参数中。

因此,只需将 的输出setup --zsh-completion-script $(which setup)放在文件调用_setup$HOME/.config/zsh/completions

fpath=($HOME/.config/zsh/completions $fpath)
autoload -U compinit && compinit
于 2020-05-18T02:36:30.057 回答