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

Colors zsh提示主题,导致完成请求时光标向右移动,colors,command-prompt,zsh,prompt,Colors,Command Prompt,Zsh,Prompt,我正在尝试使用转义字符创建一个简单的提示,以定义提示组件的颜色: PROMPT=$'\e[0;35m%n\e[0m \e[0;92m%~\e[0m \e[0;97m$ \e[0m' 这可以很好地工作,除了一件事——当我转到tabcomplete时,我的光标(以及要完成的相关命令)会向右移动 有点谷歌搜索把我带到这里: 将提示格式更改为类似以下内容: PROMPT='%{$fg[green]%}%n%' 解决了这个问题。但是,与使用转义字符和上面显示的颜色代码相比,绿色、洋红、蓝色等颜色选项

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

PROMPT=$'\e[0;35m%n\e[0m \e[0;92m%~\e[0m \e[0;97m$ \e[0m'
这可以很好地工作,除了一件事——当我转到tabcomplete时,我的光标(以及要完成的相关命令)会向右移动

有点谷歌搜索把我带到这里:

将提示格式更改为类似以下内容:

PROMPT='%{$fg[green]%}%n%'
解决了这个问题。但是,与使用转义字符和上面显示的颜色代码相比,绿色、洋红、蓝色等颜色选项在可选择的颜色方面更具限制性

我不知道如何设置上面显示的第一个提示的格式,以便选项卡完成问题消失。我尝试了一些不同的排列,关于%{放在哪里,它们最终都会破坏提示字符串


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

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

%{…%}

包含字符串作为文字转义序列。大括号内的字符串不应更改光标位置

--

下面是简化的erroneuos案例

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

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

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

你可以通过查看
哪些颜色来检查
$fg
是如何定义的。从我收集的信息来看,这与手动转义完全相同。事实上,如果我设置
提示符=$'%{\e[38;5;120m%}%n>,
,我就不会为了完成而进行字符移位。因此,最后,整个事情变成了:
提示符=$'%{e[0;35m%}%n%{\e[0m%}%{\e[0;92m%}%~%{\e[0m%}%{\e[0;97m$%}%{\e[0m%}'
。非常饱;)。谢谢你的帮助。