使用以下命令运行 Mercurial 命令行颜色扩展上,颜色在 Windows 命令提示符 ( cmd.exe
) 中按预期显示。然而,在 cygwin 中,颜色显示为基础 ANSI 代码 (例如:←[0;34;1m
)。
当我搜索解决方案时,似乎颜色在 cygwin 中起作用但在命令提示符中不起作用的情况更常见。我是否忘记在 cygwin 中安装一些可以激活颜色显示的有用的东西了?
我在 Windows 7 64 位和 Vista 32 位机器上都遇到了这个问题。我尝试了bash
和tcsh
shell。如果我执行类似 的操作,我可以在两个 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"