SGR 9 — 删除线
在后续文本中央绘制一条水平删除线。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b[9m\033[9m\e[9mESC [ 9 m1b 5b 39 6d实时预览
在浏览器中通过与解码器相同的分词器渲染 —— 无需打开终端。
说明
ECMA-48 §8.3.117 把 SGR 9 命名为「crossed-out」(划掉)。字节序列为 \x1b[9m。终端在后续每个字符单元中部绘制一条水平线;底层文本不变 —— 可选中、可复制、读屏可读 —— 只是渲染被改变。命名在不同文档间不一致:ECMA-48 说「crossed-out」,terminfo 用 smxx / rmxx(s-m-x-x 记忆口诀:「start mode x crossed-out」),多数面向用户的工具说「strikethrough」或「strike」。配对关闭码为 SGR 29(\x1b[29m),移除横线但不动 前景 / 背景 / 加粗 / 斜体 / 下划线 状态。
删除线是后 2010 时代的 SGR 属性中,在上方支持矩阵的主流 GUI 模拟器里覆盖最广的一个 —— xterm、iTerm2、kitty、alacritty、wezterm、gnome-terminal、Konsole、Ghostty、Apple Terminal.app(自 macOS 10.7 Lion,2011)与 Windows Terminal 都渲染。例外可预测:Linux console / fbcon 忽略 SGR 9(framebuffer 模式下无字形叠加渲染器),ConPTY 之前的旧 Windows cmd.exe 丢弃。最重要的多路复用器陷阱是 GNU screen:screen 4.x *与* screen 5.0 *都* 和 OSC 8 超链接、扩展下划线一起把 SGR 9 剥离(lib/terminals.ts 中记录的 screen-strips-modern-sgr 怪癖)—— 这些转义永远到不了外层终端。tmux 在外层 terminfo 声称 smxx / rmxx cap 的前提下转发 SGR 9;多数现代 terminfo 条目声称,但较老的 screen-256color 条目不声称,因此把 default-terminal "screen-256color" 设上的 tmux 会话会静默丢弃删除线 —— 修复办法是 set -g default-terminal "tmux-256color" 或 xterm-256color。
使用 SGR 29(\x1b[29m)关闭。经典用途是在 diff 查看器中渲染删除行、在 TODO / CLI 清单中划掉条目 —— git diff 本身不输出删除线(它只用红色 + 前导 -),但定制 diff 渲染器如 delta 和 difftastic 可选地为「删除」一侧使用。按 color-only-signal,绝不要单独用删除线作为「已删除」内容的唯一信号:剥离该属性的终端(Linux console、GNU screen、旧 cmd.exe)会把这段文字渲染成与正常内容视觉一致。同步搭配显式前缀([del]、~~、前导 -),即使该行被丢弃,含义仍能传达。相关:sgr-underline(SGR 4 —— 相邻的线条装饰属性)、sgr-italic(SGR 3 —— 常与删除线组合用于「已被替代 / 旧」内容)、sgr-reset(SGR 0 —— 完整重置)。
规范出处: ECMA-48 §8.3.117 (SGR parameter 9)
示例
printf '\033[9mdeleted line\033[29m\n'print('\x1b[9mdeleted\x1b[0m')fmt.Print("\x1b[9mdeleted\x1b[0m")console.log('\x1b[9mdeleted\x1b[0m')printf("\x1b[9mdeleted\x1b[0m\n");在哪里用到
实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。
- taskwarrior, todo.txt CLIs已完成的任务用删除线渲染
- bat (markdown rendering)Markdown 中 `~~text~~` 删除线在终端输出时渲染为 SGR 9
- glow (markdown viewer)在 TUI 中渲染 GFM 删除线
- delta — strikethrough on removed words in --color-words
- tldr clients on deprecated example lines
常见问题
针对这条序列,开发者真正会去搜索的问题的简短回答。
\x1b[9m(删除线)在 2026 年的支持面够广吗?- 现代 GUI 终端基本都支持——xterm、iTerm2、kitty、alacritty、wezterm、ghostty、Windows Terminal、gnome-terminal、konsole 与 macOS Terminal.app 都正确渲染。明显的例外是 Linux console / fbcon(framebuffer 模式下无字形叠加渲染)与 ConPTY 之前的旧 Windows cmd.exe。GNU screen 截至 5.0 仍剥离 SGR 9——见
screen-strips-modern-sgr误区。多路复用器优先用 tmux +default-terminal "tmux-256color",避开 screen。
终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 不支持 |