我正在学习编写 zsh 完成脚本,并在阅读文档时_arguments
发现了这一部分:
n:message:action
n::message:action
这描述了第 n 个正常参数。该消息将
打印在生成的匹配项上方,并且该操作指示 [...]
该消息在哪里打印?我正在尝试使用以下最小功能,但我无法弄清楚。我需要在我的 shell 中启用某些东西吗?
function _test {
_arguments '-a' '-b[description]:my message:(x y)'
}
Run Code Online (Sandbox Code Playgroud)
$ compdef _test program
Run Code Online (Sandbox Code Playgroud)
这导致:
$ program -b <tab>
x y
Run Code Online (Sandbox Code Playgroud)
如果您知道在哪里看,它就在手册中,但是按照它的解释方式,您实际上必须知道答案才能理解手册的内容。
_arguments
称其为“消息”,手册上说这是“描述”。因此,您信心大增——或者阅读 的源代码_arguments
并弄明白这条消息是传递给 的_describe
。该函数的文档指出
将
descr
被取作为一个字符串来显示匹配以上,如果format
为样式descriptions
标签被设置。
样式是您使用zstyle
. 该段“完成系统配置”文件的样式完成的格式为:
字段始终按顺序排列
:completion:function:completer:command:argument:tag
。
所以你需要调用. 或者,如果您只想在某些情况下使用其他内容,则将其替换为其他内容。zstyle ':completion:*:*:*:*:descriptions' format=SOMETHING
*
标签的文档descriptions
在这个阶段不是特别有用,但是样式的文档format
是:
如果为 descriptions 标记设置了此项,则其值将用作字符串以在完成列表中显示上述匹配项。
%d
此字符串中的序列将被替换为这些匹配项的简短描述。该字符串还可能包含理解的输出属性序列compadd -X
请参阅compadd
文档,该文档依次涉及提示扩展;您可以主要使用视觉效果。
所以运行
zstyle ':completion:*:*:*:*:descriptions' format '%F{green}%d%f'
Run Code Online (Sandbox Code Playgroud)
你会在完成上方看到绿色的消息。或者
zstyle ':completion:*:*:program:*:descriptions' format '%F{green}%d%f'
Run Code Online (Sandbox Code Playgroud)
如果您只想在完成program
.
您需要设置format
完成的zstyle:
zstyle ':completion:*' format 'Completing %d'
Run Code Online (Sandbox Code Playgroud)
然后:
$程序-b Tab 完成我的消息 xy
详情请参阅info zsh format
。
compinstall
如果您遵循此菜单选择,则由以下设置:
zstyle ':completion:*' format 'Completing %d'
Run Code Online (Sandbox Code Playgroud)