cygwin 中的颜色显示为原始 ANSI 代码

cygwin 中的颜色显示为原始 ANSI 代码

使用以下命令运行 Mercurial 命令行颜色扩展上,颜色在 Windows 命令提示符 ( cmd.exe) 中按预期显示。然而,在 cygwin 中,颜色显示为基础 ANSI 代码 (例如:←[0;34;1m)。

当我搜索解决方案时,似乎颜色在 cygwin 中起作用但在命令提示符中不起作用的情况更常见。我是否忘记在 cygwin 中安装一些可以激活颜色显示的有用的东西了?

我在 Windows 7 64 位和 Vista 32 位机器上都遇到了这个问题。我尝试了bashtcshshell。如果我执行类似 的操作,我可以在两个 shell 中看到颜色ls --color

答案1

当您使用 Cygwin 控制台时,控制序列的解释由 Cygwin DLL 完成。该 DLL 当然只链接到 Cygwin 程序,因此非 Cygwin 程序(如 Mercurial)将无法使用它。

那么为什么它在 cmd.exe 控制台中运行时会工作,而它首先不理解控制序列?我的猜测是,当 Mercurial 认为它在控制台中运行时,它会使用 Windows 控制台 API,而当它认为它在终端中运行时,它会使用控制序列。也许这取决于是否设置了 TERM,因此请尝试取消设置 TERM 时会发生什么。

否则,请尝试在 Cygwin 终端(如 mintty 或 rxvt)中运行它。不同之处在于控制序列由这些程序而不是 Cygwin DLL 解释。

答案2

在您的.hgrc文件集中

[color]
mode = ansi

或者

[color]
mode = auto

答案3

你可以尝试这个命令:

alias ls="/bin/ls --color=auto"

相关内容