参数的消息在哪里显示?

sid*_*yll 6 zsh autocomplete

我正在学习编写 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)

Gil*_*il' 7

如果您知道在哪里看,它就在手册中,但是按照它的解释方式,您实际上必须知道答案才能理解手册的内容。

_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.


Sté*_*las 6

您需要设置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)