zsh 在执行搜索和完成时插入额外的空格

zsh inserts extra spaces when performing searches and completion

我编写了一个小程序,可以发出带有一些 Git 信息的命令行提示符。我使用 ANSI 转义序列为其着色,它看起来像这样:

但是,每当我进行制表符补全或搜索时,zsh 都会在提示后插入几个 spaces:

它似乎为提示发出的每个转义码字符插入一个 space,因为删除颜色代码消除了这种行为。为什么 zsh 这样做,我该如何阻止它?

这个例子中我的提示程序发出的实际字符序列是(假设\e代表字符033)

~/s/promptd [\e[36mmaster \e[33m±\e[31m?\e[39m]

我的 .zshrc 的相关部分是:

setopt PROMPT_SUBST
setopt PROMPT_PERCENT
PROMPT='%B$(promptd) %%%b '

经过一些额外的研究,ZSH Prompt Expansion docs 表明转义文字需要包含在 %{...%} 中。

这很麻烦,因为现在如果我想让提示程序在其他 shell 中工作,我必须有条件地输出那些,但它似乎纠正了上面显示的行为。