我尝试使用ANSI转义序列设置zsh提示符的颜色,但转义字符(\e
)似乎在显示提示时被转义。以下是我正在运行的内容以及我获得的输出的示例:
> autoload promptinit && promptinit
> autoload colors && colors
> echo "Not sure if those two lines are required" > /dev/null
> PROMPT="\e[32mhi> "
\e[32mhi> echo "Note that the escape character wasn't interpreted correctly" > /dev/null
\e[32mhi> print -P "$PROMPT"
hi>
\e[32mhi> echo "The hi> was printed in green, as I want" > /dev/null
zsh
打印文档似乎说-P
标志使其打印就好像它在提示符中一样,但它与实际的提示行为不匹配。有谁知道逃脱角色为什么不起作用?
我尝试使用$fg_no_bold
,而$fg_no_bold[red]
之类的内容确实有效,但我想使用超过8种标准颜色,但$fg_no_bold[32]
并不适用工作(任何数字,不只是32)。如果使用$fg_no_bold
获得256种颜色更容易,那么我就可以了!
谢谢!
答案 0 :(得分:11)
您需要使用美元单引号才能告诉zsh
解释ANSI转义序列。
所以
PROMPT=$'\e[32mhi> '
会做你想要的,但是更方便的是将所有特殊代码放在%{...%}
括号内,以便按字面处理代码并防止不必要的移动光标位置。
此外,您应该将颜色更改为默认颜色,除非您想将所有终端文本前景色彩化为绿色。
毕竟你的提示设置应该是
PROMPT=$'%{\e[32m%}hi> %{\e[0m%}'
答案 1 :(得分:6)
PROMPT="%F{green}hi>%f "
提供了对更改颜色的内置支持,而无需直接处理ANSI转义码。
{{1}}