zsh 提示主题导致光标在完成请求时向右移动

zsh prompt theme causing cursor to shift right upon completion request

我正在尝试创建一个简单的提示,使用转义字符来定义提示组件的颜色:

PROMPT=$'\e[0;35m%n\e[0m \e[0;92m%~\e[0m \e[0;97m$ \e[0m'

这工作正常,除了一件事 - 当我转到制表符完成时,我的光标(以及要完成的相关命令)被移到右边。

一点谷歌搜索把我带到了这里: https://github.com/robbyrussell/oh-my-zsh/issues/23

将提示格式更改为:

PROMPT='%{$fg[green]%}%n%'

修复了问题。但是,与使用转义字符和上面显示的颜色代码相比,绿色、品红色、蓝色等颜色选项在您可以选择的颜色方面受到更多限制。

我不知道如何设置上面显示的第一个提示的格式,从而解决制表符完成问题。关于放置 %{ 的位置,我尝试了几种不同的排列,它们最终都破坏了提示字符串。

格式化的正确方法是什么?或者,有没有办法使用 $fg[COLOR] 方案访问比红色、蓝色、品红色等更多的颜色?

您可以将 %{%} 放在转义字符周围。

%{...%}

Include a string as a literal escape sequence. The string within the braces should not change the cursor position.

-- zshmisc(1) SIMPLE PROMPT ESCAPES, Visual effects

所以,下面简化的错误案例,

PROMPT=$'\e[0;35m%n\e[0m '

可能是

PROMPT=$'%{\e[0;35m%}%n%{\e[0m%} '

为什么 PROMPT='%{$fg[green]%}%n%' 有效是因为 $fg[green] 产生的转义序列正确地包含在 %{...%}.