跳到主要内容
ansicode

SGR 9 — 删除线

在后续文本中央绘制一条水平删除线。

字节形式

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

\\x1b[\x1b[9m
\\033[\033[9m
\\e[\e[9m
ESC [ESC [ 9 m
hex1b 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 渲染器如 deltadifftastic 可选地为「删除」一侧使用。按 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)

示例

bash
printf '\033[9mdeleted line\033[29m\n'
python
print('\x1b[9mdeleted\x1b[0m')
go
fmt.Print("\x1b[9mdeleted\x1b[0m")
javascript
console.log('\x1b[9mdeleted\x1b[0m')
c
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
不支持

相关序列