跳到主要内容
ansicode

HPA / HPR / VPR — 绝对与相对定位(CSI ` / CSI a / CSI e)

ECMA-48 中保留行 / 列的光标移动 —— HPA(绝对列)、HPR(相对列)、VPR(相对行)—— 与 VPA 配套的完整四元。

字节形式

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

\\x1b[\x1b[<col>` (HPA) \x1b[<n>a (HPR) \x1b[<n>e (VPR)
\\033[\033[10` / \033[5a / \033[3e
\\e[\e[10` / \e[5a / \e[3e
ESC [ESC [ col ` / ESC [ n a / ESC [ n e
hex1b 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 / nHPA:绝对列(从 1 起)。HPR:右移的列数。VPR:下移的行数。省略默认 1。

示例

bash
printf '\033[40`status: ok'   # HPA: jump to col 40, keep row (note backtick, not single quote)
python
import sys; sys.stdout.write('\x1b[5a')   # HPR: move 5 cols right
go
fmt.Print("\x1b[3e")   // VPR: move 3 rows down
javascript
process.stdout.write('\x1b[1`')   // HPA: column 1 (== CR but doesn't move row)
c
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
支持

相关序列