我正在学习编写 zsh 完成脚本,在阅读文档时_arguments
我发现了这部分:
n:消息:动作
n::消息:动作
这描述了第 n 个正常参数。这信息将
打印在生成的匹配项上方行动表示[...]
哪里是信息打印?我正在尝试以下最小功能,但我无法弄清楚。我需要在 shell 中启用某些功能吗?
function _test {
_arguments '-a' '-b[description]:my message:(x y)'
}
$ compdef _test program
这导致:
$ program -b <tab>
x y
答案1
如果您知道在哪里查看,它就在手册中,但按照其解释方式,您实际上必须知道答案才能理解手册的内容。
_arguments
称其为“消息”,手册称其为“描述”。因此,您信心十足——或者阅读了源代码_arguments
,然后发现这条消息被传递给_describe
。该函数的文档指出
如果设置了标签的样式,则将其
descr
视为显示在匹配项上方的字符串。format
descriptions
样式是您配置的东西zstyle
。这“完成系统配置”部分记录完成样式的格式:
这些字段始终按顺序排列
:completion:function:completer:command:argument:tag
。
所以你需要打电话。或者,如果您只想在某些情况下执行此操作,请将其替换为其他内容。zstyle ':completion:*:*:*:*:descriptions' format=SOMETHING
*
这的文档descriptions
标签在这个阶段并不是特别有帮助,但是的文档format
样式是:
如果为描述标签设置了此项,则其值将用作字符串以在完成列表中显示上述匹配项。该字符串中的序列
%d
将替换为这些匹配项的简短描述。该字符串还可以包含由以下方式理解的输出属性序列compadd -X
请参阅compadd
文档又指迅速扩展;你主要可以使用视觉效果。
所以跑
zstyle ':completion:*:*:*:*:descriptions' format '%F{green}%d%f'
您会在完成的上方看到绿色的消息。或者
zstyle ':completion:*:*:program:*:descriptions' format '%F{green}%d%f'
如果您只想在完成 的参数时应用它program
。
答案2
您需要设置format
完成的 zstyle:
zstyle ':completion:*' format 'Completing %d'
然后:
$ 程序-bTab 完成我的消息 XY
info zsh format
详情请参阅。
compinstall
如果您按照此菜单选择进行设置:
3. Styles for changing the way completions are displayed and inserted.
[...]
1. Change appearance of completion lists: allows descriptions of
completions to appear and sorting of different types of completions.
[...]
1. Print a message above completion lists describing what is being
completed.
[...]
You can set a string which is displayed on a line above the list of matches
for completions. A `%d' in this string will be replaced by a brief
description of the type of completion. For example, if you set the
string to `Completing %d', and type ^D to show a list of files, the line
`Completing files' will appear above that list. Enter an empty line to
turn this feature off. If you enter something which doesn't include `%d',
then `%d' will be appended. Quotation will be added automatically.
description>