如何将 zsh (oh-my-zsh, iTerm2) 的提示设为斜体?

How to italicize prompt for zsh (oh-my-zsh, iTerm2)?

我想在 iTerm2 中使用 oh-my-zsh 将我的 zsh 提示(特别是正确的 prompt/RPROMPT)斜体化,但到目前为止在这样做时遇到了问题。我已经检查过终端可以使用 echo -e "\e[3mitalic\e[0m".

输出和查看斜体字体

到目前为止我已经尝试过的事情:

  1. RPROMPT = '\e[3m Hello \e[0m' :输出是文字引号 \e[3m Hello \e[0m
  2. here开始,我试过了
 HELLO = Hello
 RPROMPT = '\e[3m $Hello \e[0m'`

并且输出仍然有 \e[3m\e[0m 部分

  1. 来自 ,我尝试使用 \x1b[3m 而不是 \e[3m :仍然输出 \x1b[3m\x1b[0m

  2. 我找到了 this page 但我不明白我在看什么 at/what 我应该做什么。

我想让斜体格式正常工作,非常感谢您的帮助。

您可以使用 RPROMPT=$'string with special escaping' (See bash manual)

它可能有一些问题,例如左侧提示被编辑。

根据GrapeApple的回答进一步测试后,我找到了一个不乱左提示的解决方案。根据 zsh documentation,您需要使用字符串引号 %{ ... %} 来环绕转义序列格式,例如:

RPROMPT=$'%{\x1b[34;1;3m%} hello %{\x1b[0m%}'

为了更好的兼容性(以防有一天你 运行 你的 zsh 使用了另一种 TERM),我不会硬编码转义序列,而是使用类似

RPROMPT="$(tput sitm) Hello $(tput sgr0)"

参见 man terminfo 了解 sitmsgr0 的含义。