DL — 删除行(CSI Pn M)
删除从光标所在行起的 N 行,把后续行向上拉(在滚动区域内)—— vim 'dd' 命令的底层原语。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b[PnM\\033[
\033[PnM\\e[
\e[PnMESC [
ESC [ Pn Mhex
1b 5b <Pn> 4d说明
Delete Line。末字节 M(0x4d)—— 从光标所在行起删除 Pn 行(默认 1);活动滚动区域(DECSTBM)内下方的每一行向上拉 Pn,区域底部出现 Pn 行新空行(携当前 SGR 背景色)。光标移至所在行的第 1 列(与 IL 同样的 xterm-vs-spec 列重置行为)。DL 是 vim 的 dd 命令、less 让顶端一行滚出可视区、tmux 窗格调整大小的底层原语。逆操作是 IL(\x1b[Pn L);与 \x1b[T;Br(DECSTBM)配合可实现原子化的小区域滚动而无需重绘整屏。terminfo 能力名为 dl1(Pn=1)或 dl(带参数)。
规范出处: ECMA-48 §8.3.32 (DL)
示例
# Set scroll region rows 1..5, position cursor at row 2, delete 1 line.\nprintf '\033[1;5r\033[2;1H\033[1M'import sys; sys.stdout.write('\x1b[1M')fmt.Print("\x1b[1M")process.stdout.write('\x1b[1M')printf("\x1b[1M");在哪里用到
实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。
- vim, neovim — `dd` (delete line) primitive每次 `dd` / `d<motion>` 删除整行在底层都是 DECSTBM 区域内起始行的 `\x1b[<N>M` —— 下方行自动上移,编辑器无需重绘剩余每一行
- less, more — scroll-down past top line每次向下翻页都在第 1 行发 `\x1b[<N>M` —— 顶部 N 行滑出屏幕;新的尾部行随后写入 IL/DL 在页面区域底部留出的空行
- ncurses — `deleteln()` / `wdeleteln()`libncurses 的 `deleteln(WIN)` 直接落到 terminfo 能力 `dl1` / `dl` —— 任何通过反复发 `dl` 来滚动区域的程序(top、irssi、tmux 自身的状态弹窗)都经此 API 复用 DL,无需直接接触字节
- tmux status-line redraw, copy-mode prompt cleartmux 底部状态行和复制模式提示绘制在 1 行高的 DECSTBM 区域内 —— 清除它们是一次 `\x1b[1M`,不是整行重绘;即便 240 Hz 刷新,重绘也保持在 1 ms 以内
- irssi, weechat, glirc — IRC backscroll trimmingIRC 回滚超过可见上限时,TUI 在聊天区顶行发 `\x1b[<N>M` 丢掉最旧 N 行 —— 新消息随后写入 DL 在底部留出的空行,无需全局重绘
常见问题
针对这条序列,开发者真正会去搜索的问题的简短回答。
\x1b[M(DL)与\x1b[K(EL)有什么区别?- DL(
\x1b[Pn M)从光标处开始删除Pn整行 —— 后续行上移填空,滚动区域底部出现空行。EL(\x1b[Pn K)擦除*当前行内*字符 ——\x1b[0K从光标到行尾、\x1b[1K从行首到光标、\x1b[2K整行。EL 让该行原地保留(仍可见,仅为空);DL 移除该行,后续行上滚。重绘状态行用 EL;丢弃完成的日志条目用 DL。 \x1b[M会移动光标吗?- 不会。DL 之后光标停在同一行(同一列) —— 变的是该行的*内容*,现在装的是操作前紧邻下方那一行的内容。ECMA-48 §8.3.32 规定光标位置不变。注意视觉上的错觉:DL 删除光标所在行,但因为下方行向上滚,*看起来*光标移到下面吃掉了下一行。心智模型应是「删除本行,下方所有行上滚一行」 —— 不是「光标前进」。
终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
相关序列
在家族食谱中
CSI 食谱 · 6. 插入 / 删除 / 光标形状 —— IL / DL / ICH / DCH / ECH + DECSCUSR