跳到主要内容
ansicode

SGR 90–97 — 高亮前景色

8 种基础前景色的高亮变体(aixterm/xterm 扩展)。

字节形式

涵盖所有常见的字符串字面量写法,方便正反查找。

\\x1b[\x1b[91m (bright red, 90–97)
\\033[\033[91m
\\e[\e[91m
ESC [ESC [ 9 1 m
hex1b 5b 39 31 6d

实时预览

在浏览器中通过与解码器相同的分词器渲染 —— 无需打开终端。

90–97

说明

非标准但被广泛支持的 aixterm 扩展,将原 16 色调色板的高 8 色作为独立的 SGR 参数。1:1 映射 —— 90 亮黑(多渲染为中等灰)、91 亮红、92 亮绿、93 亮黄、94 亮蓝、95 亮品红、96 亮青、97 亮白。90–97 范围由 IBM 的 aixterm 保留作为 VGA 16 色调色板的高亮一半,90 年代被 xterm 采纳;现在出现在上面支持矩阵的每个终端中,包括 Linux console / fbcon 和 ConPTY。ECMA-48 本身仅定义 SGR 30–37 + 38 + 39;亮色范围记录在 xterm-ctlseqs 中作为规范扩展,也是 tput setaf 9tput setaf 15xterm-256color 等 terminfo 条目上的展开形式。

可移植性收益在于与 sgr-bold 的 bold-as-bright 怪癖解耦。SGR 1 + 基础色会让前景变亮的终端(Linux console / fbcon、conhost.exe、开启 boldColors X 资源的 xterm)上,\x1b[1;31m\x1b[91m 看起来一致;将 SGR 1 渲染为字重切换的终端(默认配置的 xterm、iTerm2、kitty、alacritty、wezterm、ghostty、Windows Terminal、现代 gnome-terminal 与 konsole)上两者分叉 —— \x1b[1;31m 是加粗红色,\x1b[91m 是普通字重的亮红。同时针对两类终端的日志高亮代码应优先使用亮色范围,确保输出一致。另一个坑是主题:SGR 90–97 的实际 RGB 由用户决定(xterm BoldBrightColors 资源、iTerm2 ANSI Bright 调色板、kitty color8color15、Windows Terminal brightBlackbrightWhite、konsole 配色),因此你发出的「亮红」在定制配置下可能呈深品红或柔粉。

仅关闭前景用 \x1b[39m(SGR default-fg)—— 精准,不动背景和其他属性。整体重置用 \x1b[0m。如果需要绕过用户配色的精确色值,用 sgr-fg-truecolor\x1b[38;2;R;G;Bm)—— 真彩色不查调色板。单色片段的清晰收尾是 \x1b[91mtext\x1b[39m;亮色加粗片段的精准收尾是 \x1b[1;91mtext\x1b[22;39m(一次性关闭加粗 + 关闭前景)。

规范出处: aixterm color extension (xterm-ctlseqs)

示例

bash
for c in 90 91 92 93 94 95 96 97; do printf "\033[${c}m■\033[0m"; done; echo
python
for c in range(90, 98): print(f'\x1b[{c}m■\x1b[0m', end='')
go
for c := 90; c <= 97; c++ { fmt.Printf("\x1b[%dm■\x1b[0m", c) }
javascript
for (let c = 90; c <= 97; c++) process.stdout.write(`\x1b[${c}m■\x1b[0m`)
c
for (int c = 90; c <= 97; c++) printf("\x1b[%dm■\x1b[0m", c);

在哪里用到

实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。

  • starship, oh-my-zsh, powerlevel10k品牌化的提示符段——亮青色用于路径,亮绿色用于 git-clean
  • git log --oneline --decorateHEAD 用亮黄色,远端引用用亮青色
  • ls --color (bright cyan = symlink target on many distros)
  • gcc, clang`warning:` 用亮洋红,`note:` 用亮青色
  • bash, zsh prompt PS1 (bright colours for highlight)

常见问题

针对这条序列,开发者真正会去搜索的问题的简短回答。

\x1b[91m 在所有 256 色终端里都通用吗?
大多数情况下可用,但并非通用。SGR 90–97 是 aixterm 标准的亮色前景槽位(调色板索引 8–15),支持矩阵里所有现代终端都能渲染 —— xterm、kitty、iTerm2、alacritty、wezterm、ghostty、Windows Terminal、gnome-terminal、konsole。例外是精简环境:4.7 之前的 Linux fbcon、某些只识别 30–37 的分页器管道场景,以及 8 色上限的 CI 日志渲染器(见 \x1b[101m 兄弟条目)。要绝对可移植,请用 \x1b[38;5;9m(256 色调色板槽位 9)—— 比高亮位写法在 8 色终端上的回退更优雅。
macOS Terminal 默认配置把 fg-bright-red 映射成灰色,我怎么才能打出真正的亮红?
彻底绕开调色板用真彩色 —— \x1b[38;2;255;85;85m 按字面 RGB 画出 xterm bright-red,与用户配置无关。SGR 90–97 是调色板查表,macOS Terminal 的 Basic / Pro 配置有意把若干亮色槽位重映射成灰阶以适应白底可读性。也可以让用户切换到忠于 xterm 的配置,但那是你不想要的支持工单循环 —— 见 sgr-fg-truecolor 推荐的可移植写法。

终端支持

xterm
支持
Linux console (fbcon)
支持
macOS Terminal.app
支持
iTerm2
支持
Windows Terminal
支持
cmd.exe / ConPTY
支持
kitty
支持
alacritty
支持
WezTerm
支持
Ghostty
支持
GNOME Terminal
支持
Konsole
支持
tmux
支持
GNU screen
支持

相关序列

在家族食谱中

SGR 食谱 · 2. 基础 16 色 —— `\x1b[31m` 那一票