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

Ash*_*Ash 6 windows-7 windows-vista cygwin colors mercurial

当运行带有颜色扩展名的命令行 Mercurial 时,颜色在 Windows 命令提示符 ( cmd.exe) 中按预期显示。但是,在 cygwin 中,颜色显示为底层 ANSI 代码(例如:)?[0;34;1m

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

我在 Windows 7 64 位和 Vista 32 位机器上都遇到了这个问题。bashtcsh贝壳我都试过了。如果我执行类似ls --color.

ak2*_*ak2 6

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

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

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