因此,我不确定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
,完成脚本似乎对我来说很合适,我环顾四周,但似乎无法弄清楚为什么会发生此错误...
答案 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