wsl中zsh的颜色问题

时间:2017-08-11 17:37:22

标签: powershell terminal zsh oh-my-zsh windows-subsystem-for-linux

所以,我正在尝试在wsl终端内设置oh-my-zsh(在这里使用powershell作为控制台,但我在cmd中遇到了同样的问题)。我想我正确设置了所有颜色: enter image description here

当我跑这个时:

print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'

我得到了预期的: enter image description here

但是,正如你所知,我的提示仍然是错误的。我正在使用agnoster主题和pwd上的灰色背景应该是蓝色。

有没有办法查看转义序列,以便我可以确定转义序列与呈现的问题是否存在?

1 个答案:

答案 0 :(得分:2)

我们可以检查$PROMPT(或$PS1)。

确实,哦-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 - 选择图形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蓝色和fg默认颜色(M-nM-^BM-0cat -v转义形式的)

此时,似乎提示输出了pwd的bg蓝色代码。你可以用
检查 print -P '%b%F{red}co%F{green}lo%F{blue}rs%f%b'(注意:第一个'%b')

这意味着powershell的颜色托盘设置与ANSI转义序列不匹配。如果我们xterm看到sh的输出,我们可以在sh ./16colors.sh分布中检查终端的颜色托盘设置是否正确。^[[44m。 (例如,可以找到xterm默认设置的输出示例:16colors.sh

似乎你的powershell的Solarized(?)主题将ansi颜色序列蓝色(^[[34mgrey)映射为{{1}} - 我们眼睛的颜色。