跳到主要内容
ansicode

DECSET ?1047 — 仅切换备用屏(不保存光标)

切换备用屏但不保存光标 —— 比 ?1049 更原始的形式。

字节形式

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

\\x1b[\x1b[?1047h (enter alt) \x1b[?1047l (leave alt)
\\033[\033[?1047h / \033[?1047l
\\e[\e[?1047h / \e[?1047l
ESC [ESC [ ? 1 0 4 7 h / l
hex1b 5b 3f 31 30 34 37 68 / 6c

说明

alt-screen 共有三种私有模式 —— `?47`、`?1047`、`?1049`。**`?1047`** 仅切换备用屏,不保存/恢复光标;**`?1048`** 仅保存/恢复光标(不切屏);**`?1049`** 是现代复合形式:保存光标 + 进入 alt + 清屏;退出时还原 alt → 主屏 + 恢复光标。完全不关心光标位置的程序(动画玩具、简单状态栏工具)可用 `?1047` 节省字节;既要切屏又要保留光标的程序(vim、less、tmux、htop)应直接发送 `?1049`,而非底层 pair。注意:通过 `?1047l` 离开备用屏时 xterm 还会在翻屏前清掉主屏,会令期待无损翻屏的程序意外。

规范出处: xterm-ctlseqs (Private mode 1047)

示例

bash
printf '\033[?1047h'   # switch to alt; cursor position NOT saved\nprintf '\033[?1047l'   # back to main; main screen is cleared first
python
import sys; sys.stdout.write('\x1b[?1047h')
go
fmt.Print("\x1b[?1047h")
javascript
process.stdout.write('\x1b[?1047h')
c
printf("\x1b[?1047h");

终端支持

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

相关序列

在家族食谱中

DEC 食谱 · 2. 备用屏 —— `\x1b[?1049h` / `l`