问题描述
我正在为我的提示着色。我在 .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
已经知道它产生的字节序列不应影响提示长度,从而减轻您在任何地方使用 %{ ... %}
的负担。