optparse-applicative zsh完成脚本期间compadd失败

时间:2019-01-12 07:22:54

标签: zsh zshrc zsh-completion optparse-applicative

因此,我不确定optparse-applicative的脚本是否有问题,或者我使用的是错误的。

在适用于optparse的readme中,它指出程序是通过自动完成脚本(带有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,完成脚本似乎对我来说很合适,我环顾四周,但似乎无法弄清楚为什么会发生此错误...

1 个答案:

答案 0 :(得分:0)

您无需获取zsh-completion脚本的源代码,只需将它们添加到您的fpath参数中即可。

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

fpath=($HOME/.config/zsh/completions $fpath)
autoload -U compinit && compinit