如何在 zsh 补全列表前后用固定的文本行换行?

如何在 zsh 补全列表前后用固定的文本行换行?

具体来说,我想安排所有完成列表(在 :completion:* 上下文下)在其自己的行上前面和后面都有一个固定字符串(暂时说“ABC”)。

我尝试了多种方法,我能够得到前一行,但不能得到下面一行。最好的方法是

  1. 在 _main_complete 中使用数组 comppostfunc。包括一个使用 _message -r 打印出该行的函数。但是 comppostfun 是在 _main_complete 的末尾执行的,但显然是在创建列表之前执行的,给出的是开头而不是结尾的字符串。

  2. 创建新的完成器——返回 1 的 _complete 克隆和仅执行 _message 的完成器。这个想法是 _message 完成器放在最后。这在一定程度上是有效的,但是再次字符串出现在开始的完成清单。

  3. 通过使用标签顺序样式来调整 1 或 2,将消息放在末尾。这是行不通的。

  4. 创建 _complete 完成器的变体,该变体执行其正常操作(在一种情况下为 _normal)并以 _message 结束。同样,这两者兼而有之,但始终将消息放在第一位。使用标签顺序并不会改变这一点。

我觉得我错过了一些东西。例如,是否有一种方法可以指定将多个完成器的输出连接在一起的完成器样式?为什么在完成器中执行多个操作不能按顺序生成完成列表?如何获取标签顺序样式以将 _message 输出放在最后?

答案1

tag-order样式不会更改输出的顺序。你需要使用的是样式group-order。此外,您的开始和结束消息需要有不同的group-names。看http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Standard-Styles了解更多信息。

相关内容