因此,我正在尝试在 wsl 终端内设置 oh-my-zsh(此处使用 powershell 作为控制台,但我在 cmd 中遇到了同样的问题)。我想我正确设置了所有颜色:
当我运行这个时:print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
我得到了预期:
但是,正如你所知道的,我的提示仍然是错误的。我正在使用 agnoster 主题,密码上的灰色背景应该是蓝色的。
有什么方法可以查看转义序列,以便我可以确定问题是否出在转义序列与渲染之间?
最佳答案
我们可以检查 $PROMPT
(或 $PS1
)。
的确,oh-my-zsh 的 agnoster 主题 uses PROMPT_SUBST
为了它。因此,我们可以通过重定向或管道输出 print -P
来获得原始转义序列。 :
$ print $PROMPT
%{%f%b%k%}$(build_prompt)
$ print -P $PROMPT | cat -v ;# or redirect to a file as you like
^[[39m^[[0m^[[49m^[[40m^[[39m me@mycomputer ^[[44m^[[30mM-nM-^BM-0^[[30m ~ ^[[49m^[[34mM-nM-^BM-0^[[39m
这些原始转义序列; ANSI 转义码,在 https://en.wikipedia.org/wiki/ANSI_escape_code#Colors 中有很好的描述.它是 CSI 代码
CSI n m
SGR - 选择 Graphic Renditoin。尝试描述上述输出:
(
^[[39m
:前两个字符由 cat -v
转义。我们有 ESC[39m
。)^[[39m^[[0m^[[49m
: 来自 %{%f%k%b%}
print $PROMPT
的一部分输出。 ^[[39m
重置默认前景色,^[[0m
重置所有效果和 [[49m
重置默认背景颜色。 ^[[40m^[[39m me@mycomputer
: bg black 和 fg 默认颜色 ^[[44m^[[30m M-nM-^BM-0
: bg blue 和 fg 默认颜色( M-nM-^BM-0
是 cat -v
转义形式的 ) 此时,似乎提示输出了 pwd 的 bg 蓝色代码。你可以检查
print -P '%b%F{red}co%F{green}lo%F{blue}rs%f%b'
(注意:第一个 '%b')这意味着 powershell 的调色板设置与 ANSI 转义序列不匹配。我们可以通过
16colors.sh
检查终端的调色板设置是否正确。在 xterm
如果我们有 sh
的分布看到 sh ./16colors.sh
的输出.(可以找到示例 xterm 默认设置的输出,例如: https://www.in-ulm.de/~mascheck/various/xterm/16-table.html )
似乎您的 powershell 的 Solarized(?) 主题将 ansi 颜色序列 blue(
^[[44m
或 ^[[34m
)映射为 grey
- 我们眼睛的颜色。
关于powershell - wsl 中 zsh 的颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640893/