DECSLRM — 设置左右边距(CSI Pl ; Pr s)
把光标水平移动与滚动限制在列 Pl…Pr —— 与 DECSTBM 对应的水平方向版本。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b[<Pl>;<Pr>s\\033[
\033[1;80s\\e[
\e[1;80sESC [
ESC [ Pl ; Pr shex
1b 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 起算,包含)。默认为屏幕宽度。 |
示例
printf '\033[?69h' # enable DECLRMM first\nprintf '\033[10;30s' # constrain cols 10..30\n# now scrolling + cursor moves stay within that stripimport sys\nsys.stdout.write('\x1b[?69h') # enable DECLRMM\nsys.stdout.write('\x1b[1;40s') # left margin 1, right 40fmt.Print("\x1b[?69h\x1b[1;40s") // enable + set stripprocess.stdout.write('\x1b[?69h\x1b[1;40s')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
- 不支持
| xterm | Linux console (fbcon) | macOS Terminal.app | iTerm2 | Windows Terminal | cmd.exe / ConPTY | kitty | alacritty | WezTerm | Ghostty | GNOME Terminal | Konsole | tmux | GNU screen |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 不支持 | 不支持 | 部分 | 不支持 | 不支持 | 支持 | 不支持 | 支持 | 部分 | 不支持 | 支持 | 不支持 | 不支持 |