跳到主要内容
ansicode

DECSED / DECSEL — 选择性擦除屏幕 / 行(CSI ? Ps J / CSI ? Ps K)

仅擦除未受保护的单元 —— 显示区(DECSED)或当前行(DECSEL)。即 ED / EL 的私有模式对照。

字节形式

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

\\x1b[\x1b[?<Ps>J (DECSED) \x1b[?<Ps>K (DECSEL)
\\033[\033[?2J / \033[?2K
\\e[\e[?2J / \e[?2K
ESC [ESC [ ? Ps J / ESC [ ? Ps K
hex1b 5b 3f ... 4a / 1b 5b 3f ... 4b

说明

与 ED(`\x1b[<Ps>J`)和 EL(`\x1b[<Ps>K`)的作用域完全相同(`Ps=0` 光标→末尾,`1` 开始→光标,`2` 整个区域),但会跳过 DECSCA(`\x1b[<Ps>"q`)标记为「受保护」的单元。DECSCA 把单个字符单元标记为受保护(`Ps=1`)或未受保护(`Ps=0` / `2`);DECSED 与 DECSEL 是唯一遵循这一标记的擦除原语。常用于表单 —— 用 DECSCA 把不可变的标签设为受保护并绘制,把用户输入接收在未保护单元,`\x1b[?2K` 只清空输入字段而不影响标签。除了表单 / 数据录入场景,这两个序列极少使用;许多现代模拟器(alacritty、wezterm、ghostty)根本不跟踪 DECSCA,遇到时按普通 ED / EL 处理。除非真要实现 VT220 风格的数据录入表单,否则新代码不要使用。

规范出处: DEC STD 070 (DECSED / DECSEL) / DEC VT510 RM

参数

Ps`0`(默认)擦除从光标到区域末尾 · `1` 区域起始到光标 · `2` 整个区域。DECSCA 标记为受保护的单元会被跳过。

示例

bash
# Erase only unprotected cells on the current line:\nprintf '\033[?2K'
python
import sys\n# Selective ED 2 — keep DECSCA-protected labels intact:\nsys.stdout.write('\x1b[?2J')
go
fmt.Print("\x1b[?0K")   // selective EL: cursor to end of line
javascript
process.stdout.write('\x1b[?2K')   // selective EL: whole line, skip protected cells
c
printf("\x1b[?1J");  // selective ED: top of screen to cursor

终端支持

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

相关序列

在家族食谱中

CSI 食谱 · 3. 擦除 —— ED `J` 与 EL `K`