VPA — 垂直行绝对定位(CSI d)
将光标移动到绝对行,保持当前列不变。
字节形式
涵盖所有常见的字符串字面量写法,方便正反查找。
\\x1b[
\x1b[<row>d\\033[
\033[3d\\e[
\e[3dESC [
ESC [ row dhex
1b 5b ... 64说明
Vertical Position Absolute。把光标移到第 <row> 行(从 1 开始),不改变列 —— 是 CHA(\x1b[<col>G,cursor-column)的行版对照。省略时默认 row=1(\x1b[d)。超界数值被钳制到可视区域(启用 DECOM 时为 DECSTBM 滚动区域)。VPA 的「保留列」行为使其成为在已知行重绘状态栏 / 进度行的正确原语,而用户继续在上方列输入 —— CUP(\x1b[r;cH)则会把列重置为 1。日常 TUI 多用绝对 (row, col) 二元组,因此使用频率不如 CUP / CUU / CUD,但每个 ECMA-48 兼容终端都支持它。
规范出处: ECMA-48 §8.3.158 (VPA) / xterm-ctlseqs
示例
printf '\033[24dstatus: ok' # jump to row 24, keep columnimport sys; sys.stdout.write('\x1b[24dstatus: ok')fmt.Print("\x1b[24dstatus: ok")process.stdout.write('\x1b[24dstatus: ok')printf("\x1b[24dstatus: ok");在哪里用到
实际会发出该序列的工具——把抽象字节锚定到你已经用过的命令上。
- vim / neovim status line redraw`:redrawstatus` 与每窗口的 `&statusline` 重绘路径用 VPA 跳到状态行,同时保留光标当前列 —— 省去 CUP `\x1b[<row>;<col>H` 来回切换和缓冲区光标处于行中时的额外列运算
- htop / btop / glances column-aligned rows在写入页眉 / 页脚最左列后,htop 发 VPA 跳到下一行同一列,而不必为每行重算列 —— 列恒定正是 htop 纵向条柱在 SIGWINCH 重绘下仍干净渲染的关键
- ncurses `wmove(WIN, row, col)` when column unchangedncurses 的差分渲染器在脏行追踪指示列与上次光标列一致时发 VPA `\x1b[<row>d` 而非 CUP —— 每次重绘省 1-2 字节,在慢速远程 PTY 上累计显著
- less status-line repaintless 通过 VPA 跳到底行 + EL `\x1b[K`(清行)+ 写入来重绘 `:` 提示符 —— 上次换行后列已为 0,因此用 VPA 即可,不必 CUP
- tmux pane-status-format updatestmux 每窗格状态行更新(`set -g pane-status-format`)发 VPA 落到窗格视口内的状态行 —— `\x1b[<row>d` 在窗格做水平分割且列原点不同时仍能干净通过每窗格转换
常见问题
针对这条序列,开发者真正会去搜索的问题的简短回答。
\x1b[<n>d(VPA)与\x1b[<n>;<col>H(CUP)有何不同?- VPA(
\x1b[Pn d)把光标设为第Pn行,*同时保留当前列*。CUP(\x1b[Pn1;Pn2 H)同时设置行与列。绘制纵向侧边栏 / 滚动条 / 列对齐状态指示时,VPA 让你逐行下移而不必每行重算列。两者行号均按 ECMA-48 从 1 起计;\x1b[1d到第 1 行。需要在屏边夹紧时,终端会代为处理(多数夹紧到第 1 行 / 第 LINES 行)。 \x1b[<n>d(VPA)是从 0 起还是从 1 起?- 从 1 起,与 CUP 一致。
\x1b[1d是第 1 行;\x1b[0d*不*是第 1 行 ——Pn=0按 ECMA-48 被视作Pn=1(多数终端静默夹紧;少数遗留解析器直接拒收)。省略Pn同样默认为 1:\x1b[d等同\x1b[1d。CUP / HVP / CHA 上同样的陷阱见cup-1-based-not-0-based误区条目。
终端支持
- 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 | 部分 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |