powershell - wsl 中 zsh 的颜色问题

标签 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 主题,密码上的灰色背景应该是蓝色的。

有什么方法可以查看转义序列,以便我可以确定问题是否出在转义序列与渲染之间?

最佳答案

我们可以检查 $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-0cat -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/

    相关文章:

    json - Azure 自动化 Webhook - Twilio StatusCallback 未到达 JSON

    zsh - oh my zsh 主题中的 %K %F 是什么?

    linux - 什么选项将使 Grep 命令从下到上搜索?

    node.js - 使用 WSL2 与安装在 Windows 上的应用程序交互

    bash - 如何将 SHELL 重新更改为默认 bash 而不是 zsh

    shell - 我怎样才能让 xargs 对输入做一些事情,然后再做另一件事?

    Powershell 安装 - 未找到指定搜索条件和模块名称的匹配项

    powershell - 为什么我的 radio button.checked 比较不起作用?

    c# - 通过代码调用时获取 Powershell 命令的输出

    linux - 通过 xterm sudo 到另一个用户/另一个服务器后,丢失了向上、向下、向左和向右键的键绑定(bind)