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 - 所以我会把它留在这里...
我运行进入如下情况。我得到了这样的自动完成条目:
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 - 所以我会把它留在这里...