跳到主要内容
ansicode

SGR 53 — 上划线

在字形上方绘制一条线 —— 与下划线相对。使用 SGR 55 关闭。

字节形式

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

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

实时预览

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

上划线文本

说明

ECMA-48 §8.3.117 将 SGR 53 定义为 OVERLINED —— 在字形顶部沿水平方向绘制一条线,是下划线(SGR 4)的视觉镜像。字节序列 \x1b[53m。使用 SGR 55(\x1b[55m)关闭 —— 与 SGR 24 关闭下划线、SGR 29 关闭删除线对应。视觉上多数字体把它渲染为大写字母顶部上方的细线,部分模拟器画得稍粗或留出少许偏移给变音符。规范把 SGR 53 / 55 划进与下划线、删除线同一个强调家族 —— 三种大致并行的「在字形上画水平线」属性。

支持矩阵是现代 SGR 中分化最明显的。支持端:kitty、wezterm、contour、ghostty、foot,以及近期的 iTerm2 与 Konsole。不支持端:xterm、alacritty、Windows Terminal、gnome-terminal、Linux console、Apple Terminal.app *不* 渲染 —— 它们解析并静默吞掉 SGR 53 / 55(无报错、无视觉)。terminfo 完全没有为上划线定义能力 —— 即便在支持的终端上,tput 也没有可移植拼法,因此程序必须直接发字节。tmux 3.0+ 仅在显式配置 terminal-features '*:overline' 时转发 SGR 53;旧版本 tmux 会剥掉。「分化支持」的现实是:在不支持的终端上发出 SGR 53 没有任何视觉信号 —— 是静默破损的 UX。不留神的作者会信誓旦旦说「我处处都测过」,因为他测的全是 kitty。

防御性写法是把 SGR 53 与一个能在不支持终端上幸存的回退配对。最常见做法:同时为每个字符额外发 Unicode 结合上划线(U+0305,COMBINING OVERLINE)—— 渲染 SGR 53 的终端会同时显示两者(一道无害的冗余上划线),忽略 SGR 53 的终端仍能在每个字形上看到组合上划线。其他回退:用 U+203E OVERLINE 字符做排版前后缀;或启动时检测终端能力,运行时终端不在支持名单内时彻底跳过上划线强调。回退至关重要的常见用法:NATO 消息上划线约定、日志严重级标记(在 ALERT 行上加上划线)、区分「与划掉不同」的内容、突出帮助文本中的快捷键。color-only-signal 无障碍陷阱同样适用 —— 屏幕阅读器完全忽略上划线,绝不能让它独自承担语义;务必搭配文本标签。相关:sgr-underline(SGR 4 / 24 —— 上划线在视觉上补足的下划线镜像)、sgr-strikethrough(SGR 9 / 29 —— 另一种「画水平线」强调,矩阵分化程度与上划线相近)、sgr-reset(SGR 0 —— 一并清除上划线及其他所有属性)。

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

示例

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

终端支持

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

相关序列