首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >optparse期间compadd失败-适用的zsh完成脚本

optparse期间compadd失败-适用的zsh完成脚本
EN

Stack Overflow用户
提问于 2019-01-12 15:22:54
回答 1查看 86关注 0票数 3

所以我不确定这是optparse-applicative的脚本有问题,还是我用错了。

在optparse-applicative readme中,它指出可以通过自动完成脚本和zsh选项使程序可用。对于我的程序setup

代码语言:javascript
复制
$> setup --zsh-completion-script `which setup`

输出:

代码语言:javascript
复制
#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

我在我的zsh中运行了以下代码(我使用了oh- my -zsh,但我删除了它,这仍然发生在一个最小配置中,只需要添加一个小路径来获取setup脚本)。

代码语言:javascript
复制
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,完成脚本在我看来似乎是正确的,我看了看周围,但我似乎不明白为什么会发生这个错误……

EN

回答 1

Stack Overflow用户

发布于 2020-05-18 10:36:30

您不需要编写zsh完成脚本,只需将它们添加到fpath参数中即可。

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

代码语言:javascript
复制
fpath=($HOME/.config/zsh/completions $fpath)
autoload -U compinit && compinit
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54157564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档