具有ANSI颜色处理的Windows控制台


31

是否有适用于Windows的控制台模拟器可以解释ANSI着色?

我们使用rspec和我们团队的一部分使用Windows,并且用于着色的特殊字符串对他们来说不是很有用;)。

Answers:


37

ConEmu支持ANSI X3.64和Xterm 256颜色扩展。我是这个控制台模拟器的作者。

在ConEmu选项卡中运行的所有进程都会处理Ansi序列。

AFAIK,ConEmu比Ansicon支持更多代码。

ConEmu和ANSI X3.64 / Xterm 256色


1
这个岩石!作为玩家,我喜欢地震功能。然而,控制台似乎被锁定在屏幕顶部(即使选项锁定在顶部禁用)。谢谢
Ced 2015年

你如何使用标签运行cmd?
Mikey

@Mikey什么?先阅读答案。
Maximus

29

本页面上的答案均未提及ANSI终端控制的新支持的一个重要方面,该终端控制已添加到构建16257(及更高版本)的Windows 10控制台主机中。即,默认情况下不启用它。除非您使用的特定软件通过使用标志调用SetConsoleMode API 来启用 ANSI处理,否则ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)您将看不到颜色或获得该应用程序的ANSI处理。

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode

使用WriteFileWriteConsole编写时,将为VT100和类似的控制字符序列解析字符,这些控制字符序列控制光标移动,颜色/字体模式以及也可以通过现有Console API执行的其他操作。有关更多信息,请参阅控制台虚拟终端序列。

我猜原因本页工作所示的例子是,显然echo命令(或者也许是批处理的一部分CMD.EXEconhost)通过调用刚才提到的API支持ANSI处理。但是许多其他工具或可执行文件可以写入stdinstdout不执行此操作,在这种情况下,您将看不到这些进程的颜色。

幸运的是,全局默认值可以从选择加入更改为选择退出。注册表项HKEY_CURRENT_USER\Console\VirtualTerminalLevel设置处理ANSI转义序列的全局默认行为。创建DWORD密钥(如有必要)并将其值设置为默认情况下1全局启用(或0禁用)ANSI处理。

[HKEY_CURRENT_USER \控制台]
“VirtualTerminalLevel”= DWORD:00000001

请注意,此注册表设置控制默认值,这意味着它仅影响未通过调用显式操作控制台模式的控制台应用程序SetConsoleMode(...)。由此可见,虽然注册表值可能有助于为控制台模式不经意的应用程序启用 ANSI ,但它对任何控制台模式 - 精明的应用程序(由于某种原因)可能明确禁用 ANSI 没有任何影响。

在此输入图像描述


这应该是公认的答案
7

21

从Windows 10 TH2(v1511)开始,conhost.exe(以及扩展名cmd.exe)支持ANSI Escape序列,特别是颜色:

来自下面提到的MSDN页面的图像

有关控制台虚拟终端序列MSDN页面说明了支持的序列以及如何启用它们:

您可以使用GetConsoleModeSetConsoleMode标志来配置此行为。[...]

以下序列的行为基于VT100和派生的终端仿真器技术,最具体的是xterm终端仿真器。有关终端序列的更多信息,请访问http://vt100.nethttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html



您还可以使用Colortool更改默认颜色。新的Windows 10安装将获得易于阅读的略微修改的颜色(尤其是黑色的蓝色),但更新将保留旧的,难以阅读的颜色。

10

是否有适用于Windows的控制台模拟器可以解释ANSI着色?

10之前的Windows - 在控制台上没有本机支持ANSI颜色

对于低于10的Windows版本,Windows命令控制台默认情况下不支持输出着色。您可以安装CmderConEmuANSICONMintty(默认情况下在GitBash和Cygwin中使用)来为Windows命令控制台添加着色支持。

Windows 10 - 命令行颜色

从Windows 10开始,Windows控制台默认支持ANSI Escape序列和一些颜色。

MSDN文档

演示

在此输入图像描述

批处理命令

win10colors.cmd是由Michele Locati撰写的:

@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m                     [31mred foreground color[0m
echo ^<ESC^>[7m                      [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m                   [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m

从版本1607(OS Build 14393.693)开始,Windows 10中的颜色已被禁用。
geff_chang

2
我为什么要相信?事实请。a)更改日志中没有任何内容:support.microsoft.com/en-us/help/4009938 b)为我工作:imgur.com/a/MNPNm
Jens A. Koch

1
我不确定Win10的确切版本,但是这里提到的是:github.com/symfony/symfony/issues/19520在我公司的笔记本电脑上 - Ver 1511(OS Build 10586.753) - 我不需要它。在我的家用电脑上,我不得不使用ansicon,因为默认情况下颜色没有打开。
geff_chang

4
他们刚刚引入了一个控制彩色输出的标志,默认情况下为false。请参阅wpdev.uservoice.com/forums/...)--- Symfony在Windows上使用PHP.exe,其中标志已关闭,因此他们必须等待一个补丁,该补丁登陆:github.com/php/php- src / pull / 2103。情况得到解决 ---对于cmd.exe,标志始终为true。这就是为什么你在控制台上有颜色支持。
Jens A. Koch 2017年

1
这些代码也会在linux的shell脚本中运行吗?或者是以不同的方式完成的?
Mikey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.