终端
Windows Terminal —— ANSI 转义码支持情况
Windows Terminal 是微软于 2019 年首次发布、2020 年 5 月发布 1.0 版的现代开源终端应用。它取代了旧版 conhost.exe 的渲染层,直接解析 VT 转义序列——`\x1b[31m` 不再需要 SetConsoleTextAttribute。底层通过 ConPTY(内核态伪控制台)与进程通信,在现代 VT 字节与遗留 `cmd.exe` 调用方使用的 Win32 控制台 API 之间双向翻译。
实际效果:在 Windows 10 1809+ 与 Windows 11 上,你可以发送与 Linux 脚本相同的 xterm-ctlseqs 序列,Windows Terminal 都能正确渲染。少数缺口(kitty 图形协议、Sixel 直到 1.22 才内置)见下方说明。
最近更新
特性支持情况
该终端在站点统一矩阵跟踪的 15 个特性上的表现。点击任意特性名可查看其在全部终端上的完整支持情况。
- 8 种基础色(30–37 / 40–47)SGR 30–37 前景,40–47 背景。支持
- 高亮(aixterm)色(90–97 / 100–107)aixterm SGR 扩展。支持
- 256 色调色板(38;5;n / 48;5;n)xterm 256 色扩展。支持
- 24 位真彩色(38;2;r;g;b)1670 万直接 RGB。设置 $COLORTERM=truecolor。支持
- 斜体(SGR 3)斜体文本属性。支持
- 扩展下划线(4:1–4:5)波浪/点/虚下划线样式。支持
- 删除线(SGR 9)文本中央的水平线。支持
- OSC 8 超链接内联可点击 URI。支持
- 备用屏幕(?1049h)全屏应用缓冲区。支持
- 鼠标跟踪(SGR ?1006)鼠标点击/拖拽事件。支持
- 括号粘贴(?2004)粘贴文本被 ESC[200~/ESC[201~ 包裹。支持
- 焦点事件(?1004)获得焦点时 ESC[I,失去时 ESC[O。支持
- Sixel 图形DEC sixel 内联位图。支持
- Kitty 图形协议PNG/RGB 内联图像和动画。不支持
- 同步输出(?2026)原子化帧更新,避免撕裂。支持
在此终端可用的序列
该终端能完整处理的转义序列对应的权威参考页。每条均链接到完整页面,含字节形式、规范出处与多语言示例。
- SGR 38;2;R;G;B — 24 位真彩色前景
\x1b[38;2;R;G;Bm直接指定 16,777,216 种 RGB 前景色之一。
- DECSET 1049 — 备用屏幕缓冲
\x1b[?1049h (enter) \x1b[?1049l (leave)切换到独立屏幕缓冲区(vim/less 启动时使用)。
- CUP — 设置光标位置
\x1b[row;colH将光标移动到绝对行/列(从 1 开始)。
- OSC 0 / 2 — 设置窗口/图标标题
\x1b]0;TITLE\x07修改终端窗口的标题栏文本。
- DECSET ?2004 — 括号粘贴模式
\x1b[?2004h (enable) \x1b[?2004l (disable)将粘贴文本用独立的转义标记包裹,让应用区分粘贴与键入。
细节与版本说明
在生产中使用某序列前应知晓的、该终端特有的注意事项。
- ConPTY 把遗留控制台 API 改写为 VT
- 当遗留程序调用 SetConsoleTextAttribute 或带 Windows 色彩属性的 WriteConsoleW 时,ConPTY 会先把调用翻译为等价的 SGR 字节,再交给 Windows Terminal 的解析器。终端本身只看到 VT。已知有两类信息丢失:ConPTY 会合并子单元格光标移动;并丢弃遗留程序未预期的鼠标模式字节。
- Sixel 在 1.22(预览版)落地,需在设置中启用
- Windows Terminal Preview 1.22(2024 年)开始提供 Sixel 渲染。可在 设置 → 配置 → 高级 → "启用 Sixel 图形" 中开启,或在 profiles.json 中设 `"experimental.sixelSupport": true`。在 1.22 进入稳定版之前,推荐通过 DA1(`CSI c`)检测——Windows Terminal 只有在该选项开启时才会在响应中包含 `4`。
- Kitty 图形:未支持,相关提案 #16264
- kitty `_G` APC 图形协议尚未实现。团队在 microsoft/terminal#16264 中的立场是:等 kitty 规范稳定到 v0.20 以上、不再追加未记录的扩展块后再考虑。跨终端图像可在 1.22+ 上回退到 Sixel。
- 默认 $TERM 为 xterm-256color
- Windows Terminal 在 WSL 与 SSH 会话中将 `$TERM` 设为 `xterm-256color`,该条目不声明 Smulx(扩展下划线)或 Setrgbf / Setrgbb(真彩色 terminfo),尽管 Windows Terminal 自身完全支持。如果希望程序通过 terminfo(`tput colors`)而不是环境变量启发式来检测,请在 shell 启动后将 `$TERM` 设为 xterm-direct。