跳到主要内容
ansicode

SGR 48;2;R;G;B — 24 位真彩色背景

直接指定 16,777,216 种 RGB 背景色之一。

字节形式

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

\\x1b[\x1b[48;2;R;G;Bm
\\033[\033[48;2;R;G;Bm
\\e[\e[48;2;R;G;Bm
ESC [ESC [ 4 8 ; 2 ; R ; G ; B m
hex1b 5b 34 38 3b 32 3b ... 6d

实时预览

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

255,100,50 / 100,200,255 / 180,120,255

说明

sgr-fg-truecolor\x1b[38;2;R;G;Bm)的背景版本。R、G、B 各取 0–255 —— 1,677,7216 种背景色。分号写法是事实标准;符合 ECMA-48 的冒号形式 \x1b[48:2::R:G:Bm(第 4 个子参数为空,按 ITU-T T.416 表示默认色彩空间 ID)也被 xterm、kitty、alacritty、wezterm 和多数现代模拟器接受。该扩展可追溯到 xterm 282(2013 年 9 月),记录于 xterm-ctlseqs §"Direct color";ECMA-48 本身只标准化通过 SGR 48 + 子参数 5 实现的索引形式。

跨环境代码在发送真彩色背景前务必先探测 $COLORTERMtruecolor24bit)—— 缺乏支持的终端行为各异。Apple Terminal.app 会静默量化到最近的 256 色槽位,常使鲜艳输入呈现污浊背景,且即便用户手动设置也不通过 $COLORTERM 公告真彩色。Linux console / fbcon 完全忽略该转义。Windows conhost.exe 在低于 ConPTY 1809+ 的版本上量化到 16 色;现代 Windows Terminal 渲染真正的 24 位。screen 4.x 量化;screen 5.0 正确转发。tmux 需要 set -ag terminal-overrides ',xterm-256color:RGB'(或现代 Tc cap)才能转发真彩色 —— 没有这一行,真彩色字节到达 tmux 后会先被量化再外发。iTerm2、kitty、alacritty、wezterm、ghostty、gnome-terminal 3.12+ 与 konsole 都原生渲染真彩色背景。

仅重置背景用 \x1b[49m —— 精准,不动前景和其他属性。整体重置用 \x1b[0m。为做到主题诚实,搭配真彩色背景时应自行算出对比色作为前景,而不是把用户默认前景叠在你的定制背景上 —— WCAG-AA 对比度规则同样适用于终端输出。优雅降级到未知终端的标准模式:if [ "$COLORTERM" = truecolor ]; then printf '\\x1b[48;2;%d;%d;%dm' …; else printf '\\x1b[48;5;%dm' …; fi,回落路径用 RGB→256 立方体辅助函数 —— 这套逻辑见于 chalkcoloramacrossterm 等多数库的真彩色探测实现。

规范出处: ITU-T T.416 / xterm-ctlseqs (Direct color)

示例

bash
printf '\033[48;2;30;30;30;38;2;255;200;0m on graphite \033[0m\n'
python
print('\x1b[48;2;30;30;30m bg \x1b[0m')
go
fmt.Print("\x1b[48;2;30;30;30m bg \x1b[0m")
javascript
console.log('\x1b[48;2;30;30;30m bg \x1b[0m')
c
printf("\x1b[48;2;30;30;30m bg \x1b[0m\n");

在哪里用到

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

  • vim, neovim with `set termguicolors`把所有背景高亮组从 cterm 切到 GUI 24 位色
  • bat, delta TrueColor themes与对应 VS Code / TextMate 主题的调色板完全一致
  • starship — branded prompt segment bgs
  • gh (GitHub CLI)PR 状态和审查状态徽标使用 GitHub 品牌背景色
  • lipgloss / charmbracelet apps — gradient backgrounds on TUIs

常见问题

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

为什么同一段 \x1b[48;2;…m 背景在 macOS Terminal 上发灰,但在 iTerm2 上正常?
macOS Terminal.app 在渲染前会把 24 位 RGB 静默量化到其 256 色调色板,并且即便用户手动设了 $COLORTERM=truecolor 也不公告——因此基于探测的回退路径不会触发。iTerm2、kitty、alacritty、wezterm、ghostty 与 Windows Terminal 渲染真正的 24 位。修复在渲染端:通过 $TERM_PROGRAM=Apple_Terminal(或 $COLORTERM=truecolor 缺失)识别 Terminal.app,从 RGB 三元组算出 256 立方体回退(\x1b[48;5;Nm)再发。

终端支持

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

相关序列

在家族食谱中

SGR 食谱 · 4. 真彩色 —— `\x1b[38;2;r;g;b m`