ZSH 完成分隔符

ZSH Completion Delimiter

我运行进入如下情况。我得到了这样的自动完成条目:

server:install
server:lint
...

那些应该可以由 zsh 完成。实际上我的完成方法工作得很好,只要我用下划线或其他东西替换冒号,因为 ZSH(或更好的 _describe 函数)将使用冒号作为分隔符。

你可以在这个example中看到这个:

local -a subcmds topics
subcmds=('c:description for c command' 'd:description for d command')
topics=('e:description for e help topic' 'f:description for f help topic')
_describe 'command' subcmds -- topics

然而,这不是我想要的。我实际上想在自动完成条目中使用这些冒号。

所以我的问题是:我能否以某种方式转义冒号,以便 ZSH 注意到我的冒号不是描述的分隔符,或者将分隔符更改为不同于冒号的内容?

目前完成的是这样的:

#compdef mycmd

local -a completions
completions=$(complete_me 2>/dev/null)
result=$(echo "$completions" | sed "s/:/_/g") # This line should be removed
lines=("${(f)result}")
_describe 'command' lines

所有这些内容或多或少都是从各个站点一起复制的。所以可能我只是错过了一个非常简单的选项 - 但我就是找不到它 -.-.

有人可以帮我解决这个问题吗?

谢谢, 马蒂亚斯

Grml - 这是一个简单的答案。 _describe(顾名思义)总是需要一个描述。用 compadd 替换它就可以了:

compadd $lines

也许像我一样愚蠢的人更多:D - 所以我会把它留在这里...