Zsh 服装化

问题描述

我正在为我的提示着色。我在 .zshrc 文件中做的 .zshrc

  PROMPT=$'%B%{\e[38;2;224;108;117m('                                                                                                                                 
  PROMPT+=$'%{\e[38;2;229;192;123m%n'                                                                                                                                 
  PROMPT+=$'%{\e[38;2;97;175;239m%(#.?.@)'                                                                                                                           
  PROMPT+=$'%{\e[38;2;152;195;121m%m'                                                                                                                                 
  PROMPT+=$'%{\e[38;2;224;108;117m)-['                                                                                                                                
  PROMPT+=$'%{\e[38;2;198;120;221m%~'                                                                                                                                 
  PROMPT+=$'%{\e[38;2;224;108;117m]'                                                                                                                                  
  PROMPT+=$'%{\e[38;2;224;108;117m$:'                                                                                                                                 
  PROMPT+=$'%b%{$reset_color'

而且我得到了我想要的颜色,但是如果我输入一个
这样的长命令 cd 桌面
我得到这个:

cd Desktopkali)-[~]$:cd

这是我想要的:

(enes-can@kali)-[~]$:cd Desktop

我该如何解决这个问题。

解决方法

你把这个问题复杂化了;为了计算提示长度和光标位置,您似乎没有关闭任何 %{ 以将 ANSI 转义序列正确标记为零宽度项目,但您不需要原始 ANSI 转义序列第一名。

不过,这确实需要您首先以十六进制表示您的 RGB 三元组。

PROMPT='%B%F{#e06c75}('   # 224 == 0xe0,108 == 0x6c,117 == 0x75
PROMPT+='%F{...}%n'                                                                                                                                 
PROMPT+='%F{...}%(#.?.@)'                                                                                                                           
PROMPT+='%F{...}%m'                                                                                                                                 
PROMPT+='%F{...})-['                                                                                                                                
PROMPT+='%F{...}%~'                                                                                                                                 
PROMPT+='%F{...}]'                                                                                                                                  
PROMPT+='%F{...}$:'                                                                                                                                 
PROMPT+='%b%f' 

使用 %F 的好处是 zsh 已经知道它产生的字节序列不应影响提示长度,从而减轻您在任何地方使用 %{ ... %} 的负担。