SGR 48;5;n — 256 色背景
从 xterm 256 色调色板中选择背景色。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b[48;5;Nm\033[48;5;Nm\e[48;5;NmESC [ 4 8 ; 5 ; N m1b 5b 34 38 3b 35 3b <N> 6d实时预览
在浏览器中通过与解码器相同的分词器渲染 —— 无需打开终端。
说明
sgr-fg-256(\x1b[38;5;Nm)的背景版本。N 取 0–255,调色板布局相同 —— 0–7 是基础 16 色槽位(对应 40–47),8–15 是亮色槽位(对应 100–107),16–231 是 6×6×6 RGB 立方体,索引公式 16 + 36*r + 6*g + b(各分量取 0..5),232–255 是 24 级灰阶,从近黑到近白。冒号子参数形式 \x1b[48:5:Nm 也被严格遵循 ECMA-48 的解析器接受。256 色扩展源自 xterm,记录于 xterm-ctlseqs §"256-color support";它比真彩色转义早约 15 年,仍是表达基础 16 色以外色彩时最便携的方式。
终端支持范围比真彩色广、比基础 16 色窄。Linux console / fbcon 在 framebuffer 模式下拒绝 256 色(内核调色板仅 16 槽),因此 \x1b[48;5;202m 视内核构建呈空操作或回落色 —— 上面矩阵标 no。Windows conhost.exe 仅从 Windows 10 1809 起支持 256;旧版本量化到最近的 16 色槽位。16–231 立方体在矩阵中其他每个模拟器上普遍可用;232–255 灰阶是模拟器分歧最多的部分 —— alacritty、kitty、wezterm 与现代 gnome-terminal 渲染均匀灰阶,而 screen 4.x 在某些构建上把暗端灰阶量化为纯黑,5.0 修复了该问题。tmux 需要 set -ag terminal-overrides ',xterm-256color:Tc'(或现代 RGB cap)才能把 256 色转义原样转发给外层终端;缺这一行时 \x1b[48;5;202m 到达 tmux 后就停下了。
仅重置背景用 \x1b[49m —— 精准,不动前景和其他属性。整体重置用 \x1b[0m。把任意 RGB 三元组转换为最近立方体索引:16 + 36*round(r*5/255) + 6*round(g*5/255) + round(b*5/255);灰阶目标用 232 + round(luma*23/255)。若特定终端上效果不对,检查 $COLORTERM —— 取 truecolor 或 24bit 时优先用 sgr-bg-truecolor 获得精确色值;未设置或为空但 $TERM 匹配 *-256color 时,256 色立方体是最便携的目标。
规范出处: xterm-ctlseqs (256-color extension)
示例
printf '\033[48;5;202m highlight \033[49m\n'print('\x1b[48;5;202m highlight \x1b[0m')fmt.Print("\x1b[48;5;202m highlight \x1b[0m")console.log('\x1b[48;5;202m highlight \x1b[0m')printf("\x1b[48;5;202m highlight \x1b[0m\n");在哪里用到
实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。
- bat语法主题中高亮当前行的槽位背景
- deltadiff 背景使用 256 调色板——增/删 hunk 使用柔和色
- vim, neovim colourschemes (Solarized, Gruvbox) on 256-colour terminals
- tig (git TUI) — selected line bg
- fzf default --color=bg+:236 dark grey on the active row
常见问题
针对这条序列,开发者真正会去搜索的问题的简短回答。
- 为什么 iTerm2 上
\x1b[48;5;0m不等于\x1b[40m? - 两者名义上都是槽位 0,但走不同的调色板表。iTerm2 的每配置色彩预设(如 Solarized Dark、Tango)独立重映射 256 色调色板的槽位 0–15,与遗留 8 色的
\x1b[40m/SGR-40 表分离。xterm 及大多数其他模拟器把两张表的槽位 0–7 及其高亮对绑在一起,所以那里\x1b[40m==\x1b[48;5;0m。要跨模拟器逐位稳定,请用真彩色(\x1b[48;2;r;g;bm);要明确针对遗留表,则坚持\x1b[40m–\x1b[47m。 - 我的代码丢了
5;,写成了\x1b[48;Nm,终端怎么处理? - ECMA-48 保留了前导子参数(
5= 索引色 /2= 直接 RGB)正是为了让 SGR 48 后面只有一个参数时无明确含义。大多数终端要么把整段48;N当作格式错误忽略,要么把N当作下一个顶层参数处理(于是\x1b[48;5m变成\x1b[48m;\x1b[5m你的文字开始闪烁)。永远写全前缀:调色板用\x1b[48;5;Nm,真彩色用\x1b[48;2;r;g;bm—— 并在代码库里 lint 捕捉漏掉的5;。
终端支持
- xterm
- 支持
- Linux console (fbcon)
- 不支持
- macOS Terminal.app
- 支持
- iTerm2
- 支持
- Windows Terminal
- 支持
- cmd.exe / ConPTY
- 部分
- kitty
- 支持
- alacritty
- 支持
- WezTerm
- 支持
- Ghostty
- 支持
- GNOME Terminal
- 支持
- Konsole
- 支持
- tmux
- 支持
- GNU screen
- 支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |