跳到主要内容
ansicode

SGR 1 — 加粗 / 高亮

将后续文本渲染为加粗(在某些终端上为高亮色)。

字节形式

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

\\x1b[\x1b[1m
\\033[\033[1m
\\e[\e[1m
ESC [ESC [ 1 m
hex1b 5b 31 6d

实时预览

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

加粗字重

说明

在多数现代终端(xterm、iTerm2、kitty、alacritty、wezterm、Windows Terminal、gnome-terminal、konsole)上启用加粗字重 —— 实现方式是切换到当前字体的 bold 变体,因此「加粗」的视觉取决于用户的字体选择;部分等宽字体自带的 bold 字形较差,用户会在终端配置中关闭。

历史遗留的痛点是 bold-as-bright:Linux console / fbcon 以及部分使用 VGA 风格字体的复古模拟器根本没有加载粗体字形文件,因此 SGR 1 反而会将当前前景色调亮 —— 将颜色 N(30–37)映射到其高亮变体 N+8(90–97)。xterm 在 boldColors X 资源开启且未单独指定加粗颜色时也做同样的颜色提升。实际效果:发送 \x1b[1;31mERROR 的代码在 iTerm2 上是红色加粗,但在树莓派 tty 上会是亮红(无字重变化)。ConPTY / 旧版 cmd.exe 同样回落到亮色。如果想要「加粗字重 + 精确红色」,请显式写亮色(\x1b[1;91mERROR)—— 在两种解释下都幂等。

保留其他属性而仅关闭加粗时发送 \x1b[22m(SGR 22,普通字重;它同时清除 sgr-dim SGR 2)。不要用 \x1b[21m 关闭加粗 —— 其 ECMA-48 原意为「双下划线」(见 sgr-double-underline),仅少数终端将其重载为关闭加粗,跨终端会冲突。规范做法:精准开关用 \x1b[1m…\x1b[22m;同时收尾颜色/其他状态则用 \x1b[1m…\x1b[0m

规范出处: ECMA-48 §8.3.117 (SGR parameter 1)

示例

bash
printf '\033[1mbold\033[22m normal\033[0m\n'
python
print('\x1b[1mbold\x1b[0m')
go
fmt.Print("\x1b[1mbold\x1b[0m")
javascript
console.log('\x1b[1mbold\x1b[0m')
c
printf("\x1b[1mbold\x1b[0m\n");

在哪里用到

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

  • git log, git status引用名、分支标签、提交标题前缀
  • gcc, clang诊断信息开头的 file:line: 前缀
  • man pages (NAME, SYNOPSIS headings)
  • npm, pnpm package names in tree output
  • brew install summaries

常见问题

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

\x1b[22m 能取消 \x1b[1m 吗?
可以。\x1b[22m 是对应的「常规强度」关闭码——同时清掉加粗与暗淡(ECMA-48 把两者绑在一起),不影响颜色、斜体、下划线等其他属性。只想去掉字重时用它而非 \x1b[0m
为什么我的加粗红字在某些终端上变成了亮红?
这是 xterm 历史行为:加粗与基本 30–37 色组合时,许多终端(xterm、macOS Terminal、gnome-terminal 默认配置、Linux 控制台)会把颜色映射到亮色 90–97 槽位而不去加粗字形。现代终端(iTerm2、kitty、alacritty、ghostty、Windows Terminal)会同时显示加粗 + 颜色。若想严格只加粗不变亮,直接发 \x1b[1;91m 显式请求亮色即可。

终端支持

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

相关序列