DECSTR — 软终端重置
将 DEC 私有模式与 SGR 重置为默认,但不清屏,也不清回滚缓冲。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b[!p\033[!p\e[!pESC [ ! p1b 5b 21 70说明
DEC 软终端重置(DECSTR)。标准 CSI 序列,末字节 p(0x70)前有中间字节 !(0x21):\x1b[!p。xterm-ctlseqs §DECSTR 列出精确的重置集 —— SGR(颜色 + 加粗 + 斜体 + 下划线 + 反显 + 闪烁 + 删除线)、DECAWM 自动换行(?7)、DECOM 原点模式(?6)、IRM 插入 / 替换模式、键盘应用 / 光标键模式、字符集 G0–G3、DECSTBM 滚动区域(顶 = 1,底 = 可视高度)、DECSCUSR 光标样式(恢复用户默认)以及若干其他 DEC 私有模式。它明确 *不* 清屏、*不* 触及回滚缓冲、*不* 退出备用屏幕 —— 这就是「软」重置的本意,是 RIS 的精准互补。
可移植性 —— xterm、iTerm2、kitty、alacritty、wezterm、gnome-terminal、Konsole、Ghostty、Linux console、Windows Terminal、ConPTY 1809+ 全部通用。Windows 旧 cmd.exe(ConPTY 之前)完全忽略 DECSTR。典型恢复场景:vim 或 htop 在反显激活、自动换行关闭、滚动区域被限制在 5–20 行、光标隐藏、DECSCUSR 设为实心竖线的状态下崩溃。\x1b[!p 一次往返就把上述每个私有模式还原为默认 —— 且不丢失用户可能想回看的回滚。对比 RIS(\x1bc,见 ris-reset)—— 它做同样的重置 *外加* 清屏、清回滚、在 Linux console 上重新初始化整个终端状态(字体表、调色板)—— DECSTR 不够用时的更重锤子,但对用户可能仍需要的回滚是破坏性的。
规划恢复脚本时要留意「漏网名单」:DECSTR *不* 清屏(如需另发 \x1b[2J\x1b[H)、*不* 退出备用屏幕(用 \x1b[?1049l,见 alt-screen),且在部分 xterm 构建中 *不* 撤销 DECSET ?1000 / ?1006 鼠标追踪、?2004 括号粘贴、?1004 焦点事件 —— xterm 跨版本矩阵不一,kitty / wezterm 比 xterm 重置更多私有模式。在 TUI 崩溃后做完整清理的可持久 shell 提示符配方:printf '\x1b[?1049l\x1b[?1000l\x1b[?1006l\x1b[?2004l\x1b[?1004l\x1b[!p\x1b[?25h' —— 先逐一 DECRST 容易泄漏的私有模式、再 DECSTR 处理其余、最后显式显示光标。部分 shell 提供内建命令(fish 的 reset-tty,stty sane 涵盖内核侧但不涵盖终端发射端)。相关:ris-reset(RIS \x1bc —— 硬重置,清回滚)、sgr-reset(SGR 0 —— 仅颜色 / 属性重置,最轻锤)、alt-screen(DECSET ?1049 —— 须与 DECSTR 分开关闭)。
规范出处: xterm-ctlseqs (DECSTR, CSI ! p)
示例
printf '\033[!p' # soft reset; scrollback preservedimport sys; sys.stdout.write('\x1b[!p')fmt.Print("\x1b[!p")process.stdout.write('\x1b[!p')printf("\x1b[!p");常见问题
针对这条序列,开发者真正会去搜索的问题的简短回答。
- DECSTR(
\x1b[!p)与 RIS(\x1bc)有何区别? - DECSTR 是软复位——清 SGR 状态、光标保存槽、DEC 私有模式、滚动区域、原点模式、字符集,但保留屏幕内容与滚动历史。RIS 是硬复位——做 DECSTR 的一切,外加清屏、重置 Tab 位、多数终端还会重置调色板。撤销 TUI 的模式改动而不丢用户历史用 DECSTR;模拟完整上电状态才用 RIS。
终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |