跳到主要内容
ansicode

SGR 48;5;n — 256 色背景

从 xterm 256 色调色板中选择背景色。

字节形式

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

\\x1b[\x1b[48;5;Nm
\\033[\033[48;5;Nm
\\e[\e[48;5;Nm
ESC [ESC [ 4 8 ; 5 ; N m
hex1b 5b 34 38 3b 35 3b <N> 6d

实时预览

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

196 / 208 / 226 / 46 / 51 / 201

说明

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 —— 取 truecolor24bit 时优先用 sgr-bg-truecolor 获得精确色值;未设置或为空但 $TERM 匹配 *-256color 时,256 色立方体是最便携的目标。

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

示例

bash
printf '\033[48;5;202m highlight \033[49m\n'
python
print('\x1b[48;5;202m highlight \x1b[0m')
go
fmt.Print("\x1b[48;5;202m highlight \x1b[0m")
javascript
console.log('\x1b[48;5;202m highlight \x1b[0m')
c
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
支持

相关序列

在家族食谱中

SGR 食谱 · 3. 256 索引色 —— `\x1b[38;5;n m`