跳到主要内容
ansicode

SGR 0 — 重置 / 恢复默认

清除所有文本属性和颜色,恢复终端默认状态。

字节形式

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

\\x1b[\x1b[0m
\\033[\033[0m
\\e[\e[0m
ESC [ESC [ 0 m
hex1b 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 和信号处理器。中途缓冲的管道(teegrep、未加 -Rless)会让泄漏更严重:重置被丢弃,只剩开头落地。配合 /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)

示例

bash
printf '\033[31merror\033[0m\n'
python
print('\x1b[31merror\x1b[0m')
go
fmt.Print("\x1b[31merror\x1b[0m")
javascript
process.stdout.write('\x1b[31merror\x1b[0m\n')
c
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
支持

相关序列

在家族食谱中

SGR 食谱 · 1. 一键归零 —— `\x1b[0m`