跳到主要内容
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
不支持

相关序列