跳到主要内容
ansicode

DECSTBM — 设置上下边距(CSI r)

定义垂直滚动区域 —— 区域外的行被固定,区域内的行参与滚动。

字节形式

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

\\x1b[\x1b[T;Br
\\033[\033[1;24r
\\e[\e[1;24r
ESC [ESC [ T ; B r
hex1b 5b <T> 3b <B> 72

说明

Set Top and Bottom Margins。末字节 `r`(0x72);参数是基于 1 的行号 —— `T`(顶部行,默认 1)与 `B`(底部行,默认 = 屏幕高度)。一旦设置,所有滚动行为 —— 底行自然溢出、`B` 之后的 LF、SU/SD(`\x1b[NS`/`T`)以及备用屏幕 —— 都只作用于第 `T..B` 行(含端点);`T` 之上与 `B` 之下的行被固定。发送 `\x1b[r`(无参数)恢复整屏滚动。DECSTBM 执行后光标会被移到活动区域的原点(左上角)。每个全屏 TUI 都用它把状态栏(第 1 行或第 N 行)冻结,仅让正文滚动。结合 DECOM(`?6h/l`)可让光标定位也被裁剪到该区域。

规范出处: xterm-ctlseqs (DECSTBM, CSI Ps ; Ps r)

参数

T顶部行,基于 1(默认 1)
B底部行,基于 1(默认 = 屏幕高度)

示例

bash
printf '\033[2;23r'   # rows 2..23 scroll; 1 and 24 pinned\nprintf '\033[r'       # reset to full screen
python
import sys; sys.stdout.write('\x1b[2;23r')
go
fmt.Print("\x1b[2;23r")
javascript
process.stdout.write('\x1b[2;23r')
c
printf("\x1b[2;23r");

终端支持

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

相关序列

在家族食谱中

CSI 食谱 · 5. 边距与滚动区 —— DECSTBM `r` 与 DECSLRM `s`