在zsh提示符中使用ANSI转义序列

时间:2015-06-01 07:49:57

标签: zsh zshrc

我尝试使用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种颜色更容易,那么我就可以了!

谢谢!

2 个答案:

答案 0 :(得分:11)

您需要使用美元单引号才能告诉zsh解释ANSI转义序列。 所以

PROMPT=$'\e[32mhi> '

会做你想要的,但是更方便的是将所有特殊代码放在%{...%}括号内,以便按字面处理代码并防止不必要的移动光标位置。 此外,您应该将颜色更改为默认颜色,除非您想将所有终端文本前景色彩化为绿色。

毕竟你的提示设置应该是

PROMPT=$'%{\e[32m%}hi> %{\e[0m%}'

答案 1 :(得分:6)

PROMPT="%F{green}hi>%f " 提供了对更改颜色的内置支持,而无需直接处理ANSI转义码。

{{1}}