跳到主要内容
ansicode

SCOSC / SCORC — 保存 / 恢复光标(CSI s / u)

CSI 风格的光标位置保存(s)与恢复(u)—— 与 ESC 7 / ESC 8(DECSC / DECRC)有别。

字节形式

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

\\x1b[\x1b[s (save) \x1b[u (restore)
\\033[\033[s / \033[u
\\e[\e[s / \e[u
ESC [ESC [ s / u
hex1b 5b 73 / 75

说明

Save Cursor Position(SCOSC,末字节 `s`,0x73)与 Restore Cursor Position(SCORC,末字节 `u`,0x75)。源自 SCO ANSI 终端;xterm、VTE、ConPTY、Windows Terminal 现今均支持。它们与较早的 DEC 对 DECSC(`\x1b7`)/ DECRC(`\x1b8`)不同:SCOSC/SCORC 只保存位置(行 + 列),而 DECSC 还会保存 SGR 属性、字符集状态与起点模式。只有一个保存槽 —— 再次调用 SCOSC 会覆盖之前的保存。注意:当启用 LRMM 模式(`?69h`)时 `\x1b[s` 会与 DECSLRM(设置左右边距)冲突;xterm 默认 LRMM 关闭,`s` 含义明确。

规范出处: xterm-ctlseqs (SCOSC / SCORC, CSI s / u)

示例

bash
printf 'a\033[sBCD\033[u_'   # save after 'a', write BCD, restore, write _ -> 'a_CD'
python
import sys; sys.stdout.write('\x1b[s'); ...; sys.stdout.write('\x1b[u')
go
fmt.Print("\x1b[s"); /* ... */ fmt.Print("\x1b[u")
javascript
process.stdout.write('\x1b[s'); /* ... */ process.stdout.write('\x1b[u')
c
printf("\x1b[s"); /* ... */ printf("\x1b[u");

终端支持

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

相关序列

在家族食谱中

CSI 食谱 · 2. 光标移动 —— CUU / CUD / CUF / CUB + CUP + CHA / VPA