HPA / HPR / VPR — 绝对与相对定位(CSI ` / CSI a / CSI e)
ECMA-48 中保留行 / 列的光标移动 —— HPA(绝对列)、HPR(相对列)、VPR(相对行)—— 与 VPA 配套的完整四元。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\x1b[<col>` (HPA) \x1b[<n>a (HPR) \x1b[<n>e (VPR)\033[10` / \033[5a / \033[3e\e[10` / \e[5a / \e[3eESC [ col ` / ESC [ n a / ESC [ n e1b 5b ... 60 / 1b 5b ... 61 / 1b 5b ... 65说明
三个 ECMA-48 光标定位原语,分别保留另一根轴 —— 形态与 VPA(`\x1b[<row>d`)、CHA(`\x1b[<col>G`,slug `cursor-column`)相同,填补了四元中的另一半。**HPA**(`\x1b[<col>`` ` `)水平位置绝对 —— 移到绝对列 `<col>`(从 1 起),保留当前行。语义等同 CHA(`G`),末字节有别仅因 ECMA-48 § 8.3.57(HPA)与 § 8.3.9(CHA)并列存在。**HPR**(`\x1b[<n>a`)水平位置相对 —— 右移 `n` 列,保留行。效果同 CUF(`\x1b[<n>C`),末字节 `a` 用以区分 ECMA-48 正统形式。**VPR**(`\x1b[<n>e`)垂直位置相对 —— 下移 `n` 行,保留列。同 CUD(`\x1b[<n>B`),仅末字节为 `e`。三者省略时默认 `n=1` / `col=1`;超界数值被钳到可视区域(启用 DECSTBM / DECSLRM 时为对应区域)。实际上现代代码多用 CHA / CUF / CUD / CUB;但每个 ECMA-48 兼容终端都接受 HPA / HPR / VPR 别名,curses 默认能力表里就有它们,因此解析器必须识别这些末字节。HPA 的反引号 ` ` ` 末字节是所有 CSI 末字节中最容易打错的 —— 注意它是 0x60,**不是** 0x27 的单引号(那是 DECIC / DECDC 的中间字节)。
规范出处: ECMA-48 §8.3.57 (HPA) / §8.3.59 (HPR) / §8.3.160 (VPR)
参数
| col / n | HPA:绝对列(从 1 起)。HPR:右移的列数。VPR:下移的行数。省略默认 1。 |
示例
printf '\033[40`status: ok' # HPA: jump to col 40, keep row (note backtick, not single quote)import sys; sys.stdout.write('\x1b[5a') # HPR: move 5 cols rightfmt.Print("\x1b[3e") // VPR: move 3 rows downprocess.stdout.write('\x1b[1`') // HPA: column 1 (== CR but doesn't move row)printf("\x1b[10a"); /* HPR: 10 cols right — same effect as \x1b[10C */终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 |