跳到主要内容
ansicode

DECSLRM — 设置左右边距(CSI Pl ; Pr s)

把光标水平移动与滚动限制在列 Pl…Pr —— 与 DECSTBM 对应的水平方向版本。

字节形式

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

\\x1b[\x1b[<Pl>;<Pr>s
\\033[\033[1;80s
\\e[\e[1;80s
ESC [ESC [ Pl ; Pr s
hex1b 5b ... 73

说明

Set Left and Right Margins。定义一条垂直条带 —— 从 `Pl`(最左列)到 `Pr`(最右列),从 1 开始且包含两端 —— 在该范围内约束光标移动与滚动。需要先启用 DECLRMM(左右边距模式,`\x1b[?69h`);未启用时序列会被静默忽略,且末字节 `s` 改解作 SCO 保存光标(这就是常见的解析二义性:`\x1b[s` 无参 = 保存光标;`\x1b[<Pl>;<Pr>s` 两参数且 DECLRMM=on = DECSLRM)。激活后,SL / SR 滚动仅在条带内进行,CUF / CUB 在边界处钳制,写到右边距的字符会换行到下一行的左边距(而不是第 1 列)。与 DECSTBM(`\x1b[<Pt>;<Pb>r`)配合定义矩形滚动区域 —— 这是 vim `:vsplit` 等分屏编辑器把左半区独立于右半区渲染的基础。省略时默认 `Pl=1`、`Pr=` 末列。若 `Pl≥Pr`,则重置为整屏宽度。

规范出处: DEC STD 070 (DECSLRM) / DEC VT510 RM

参数

Pl最左列(从 1 起算,包含)。默认 1。
Pr最右列(从 1 起算,包含)。默认为屏幕宽度。

示例

bash
printf '\033[?69h'        # enable DECLRMM first\nprintf '\033[10;30s'      # constrain cols 10..30\n# now scrolling + cursor moves stay within that strip
python
import sys\nsys.stdout.write('\x1b[?69h')          # enable DECLRMM\nsys.stdout.write('\x1b[1;40s')          # left margin 1, right 40
go
fmt.Print("\x1b[?69h\x1b[1;40s")    // enable + set strip
javascript
process.stdout.write('\x1b[?69h\x1b[1;40s')
c
printf("\x1b[?69h\x1b[1;40s");    /* enable DECLRMM + constrain to cols 1..40 */

终端支持

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`