SGR 0 — 重置 / 恢复默认
清除所有文本属性和颜色,恢复终端默认状态。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b[0m\033[0m\e[0mESC [ 0 m1b 5b 30 6d说明
SGR 0(带参数 0 的 Select Graphic Rendition)会重置终端当前跟踪的每一个文本属性 —— 前景色、背景色、加粗、斜体、下划线、反相、闪烁等。它等价于 \x1b[m(省略参数时默认值为 0),也等价于 \x1b[;m(空参数列表按单个 0 处理)。1b 5b 30 6d 这五个字节是实战中出现最多的 ANSI 转义码:几乎每段样式输出末尾都是它。
这条序列最经典的修复场景是颜色泄漏:忘记重置会让下一个提示符、下一行日志、甚至 shell 提示符本身继承上一个设置的属性。一旦泄漏到 shell 自身的 readline 缓冲,之后每次按键都会带色,直到用户跑 reset 或开新终端。把颜色当作 try/finally 资源对待 —— 用 \x1b[…m 打开、\x1b[0m 关闭,覆盖所有出口路径,包括 panic 和信号处理器。中途缓冲的管道(tee、grep、未加 -R 的 less)会让泄漏更严重:重置被丢弃,只剩开头落地。配合 /pitfalls/no-reset-color-bleed 指南查恢复方案。
如果只想清除部分状态,请用更窄的关闭码而非整体重置:\x1b[39m 只重置前景色,\x1b[49m 只重置背景色,\x1b[22m 关闭加粗 + 暗淡,\x1b[23m 关闭斜体,\x1b[24m 关闭下划线。它们可组合 —— 例如 \x1b[39;49m 清两色但保留加粗 / 下划线。需要更彻底地把终端恢复到上电初始状态(清滚动区域、备用屏幕、鼠标模式等),参见 decstr-soft-reset(\x1b[!p)或 RIS 硬重置 \x1bc。
规范出处: ECMA-48 §8.3.117 (SGR)
示例
printf '\033[31merror\033[0m\n'print('\x1b[31merror\x1b[0m')fmt.Print("\x1b[31merror\x1b[0m")process.stdout.write('\x1b[31merror\x1b[0m\n')printf("\x1b[31merror\x1b[0m\n");在哪里用到
实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。
- ls --color, grep --color在每段彩色输出后追加,让下一段从干净状态开始
- git diff, git log
- npm, pnpm, yarn progress lines
- starship, oh-my-zsh, powerlevel10k prompts
- gcc, clang diagnostics
常见问题
针对这条序列,开发者真正会去搜索的问题的简短回答。
\x1b[m和\x1b[0m是一回事吗?- 是。ECMA-48 §5.4.2 规定省略 SGR 参数时默认为 0,所以
\x1b[m和\x1b[;m与\x1b[0m效果完全相同,会清空所有属性。支持矩阵中的所有终端都遵循这一点——挑代码里读起来最清晰的写法即可。 - 为什么我的程序输出后 shell 提示符还在带颜色?
- 你打开了 SGR 属性却没关闭——终端会一直沿用最后的颜色,直到某处发出
\x1b[0m。把颜色当 try/finally 资源对待:每个\x1b[31m(或类似码)都要配一个重置,panic 与信号处理路径也不例外。完整恢复方案见color-bleed误区条目。 - 怎样只清前景色而不丢失加粗或下划线?
- 用更窄的关闭码代替 SGR 0:
\x1b[39m只重置前景色,\x1b[49m只重置背景色,\x1b[22m关闭加粗 + 暗淡,\x1b[23m关闭斜体,\x1b[24m关闭下划线。它们可组合——\x1b[39;49m清两色但保留字重和下划线。
终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |