跳到主要内容
ansicode

SGR 3 — 斜体

将后续文本渲染为斜体;并非所有终端都支持。

字节形式

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

\\x1b[\x1b[3m
\\033[\033[3m
\\e[\e[3m
ESC [ESC [ 3 m
hex1b 5b 33 6d

实时预览

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

斜体文本

说明

斜体会将渲染的字形切换为当前字体的斜体变体。在支持的终端(xterm、iTerm2、kitty、alacritty、wezterm、ghostty、Windows Terminal、现代 gnome-terminal、konsole)上,最终效果完全取决于用户字体选择。等宽字体的斜体质量参差不齐:从精心设计(JetBrains Mono、Cascadia Code、Iosevka)到由终端通过倾斜变换合成出几乎不可读的「斜体」。许多用户因合成版难以辨认而全局关闭斜体。

斜体是基础 SGR 属性中支持最不稳定的一个。Linux console / fbcon 在 framebuffer 模式下没有斜体字形(内核仅通过 setfont 加载 PSF/PSF2 的常规 + 加粗字体),因此 SGR 3 被解析为空操作 —— neovim、manless 都仅显示普通文本。旧版 cmd.exe 和 ConPTY 同样丢弃此属性。一个历史坑:少数非常老的终端(以及个别 vt100-like 条目里 ritm/sitm 误映射的 terminfo cap)将参数 3 重新用于单色硬件上的反相 —— 当今极罕见,但若在小众硬件上见到斜体被渲染成反色,值得记住这一来源。在不能假定终端支持时,tput 的 sitm / ritm cap 是可移植的开/关方式:在 linux/linux-16color 上展开为空串,在 xterm-256color 上展开为 \e[3m / \e[23m

关闭斜体用 \x1b[23m。不要为关闭一个斜体片段就用 \x1b[0m(整体重置)—— 那会同时抹掉颜色和字重;精准做法是 \x1b[3m…\x1b[23m。若受众包含 Linux console 用户,强调用 sgr-underline 更稳(SGR 3 不渲染处它依旧出效果),而把斜体留给视觉细节属于锦上添花、不承载关键信息的场景。

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

示例

bash
printf '\033[3mitalic\033[23m back\033[0m\n'
python
print('\x1b[3mitalic\x1b[0m')
go
fmt.Print("\x1b[3mitalic\x1b[0m")
javascript
console.log('\x1b[3mitalic\x1b[0m')
c
printf("\x1b[3mitalic\x1b[0m\n");

在哪里用到

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

  • vim, neovim大多数配色方案中 Comment 语法组的默认样式
  • bat (markdown rendering)
  • git log --pretty某些自定义格式中的作者邮箱
  • less status / search emphasis

常见问题

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

为什么 \x1b[3m 在我的终端里不是斜体?
三种常见原因:(1) 字体没有斜体字形,终端静默回退到正体——换支带斜体的字体(JetBrains Mono、Cascadia Code、Fira Code 都有);(2) 终端干脆没实现 SGR 3——Linux framebuffer 控制台与较旧的 Windows 主机不支持;(3) tmux 的 default-terminal 设为 screen(其 terminfo 没声明斜体)——改用 tmux-256colorscreen-256color
\x1b[23m 能只关斜体而不丢其他属性吗?
可以——\x1b[23m 是对应的关闭斜体码,颜色、字重、下划线、反相等其他 SGR 状态都保留。需要在已有样式的文本里临时插入一段斜体时,配对用 \x1b[3m…\x1b[23m

终端支持

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

相关序列