跳到主要内容
ansicode

terminfo 能力 → ANSI 转义码对照

ncurses / terminfo 能力名(即传给 `tput` 的参数)在现代 xterm-256color 终端上展开成的 ANSI / VT 转义序列。把老 shell 脚本从 `tput` 迁移到裸字节、调试 TUI 输出的「错误字节」,或者只是想搞清楚 `tput setaf 1` 到底发送了什么时,可以查这张表。

属性(SGR)

tput 能力名terminfo 全称序列说明
sgr0exit_attribute_mode\x1b[0m重置所有文本属性与颜色,等价于 SGR 0。开启任意属性后都应配套使用。SGR 0 — 重置 / 恢复默认
boldenter_bold_mode\x1b[1m加粗 / 高亮。使用 `sgr0` 或 SGR 22 关闭。SGR 1 — 加粗 / 高亮
dimenter_dim_mode\x1b[2m半亮(弱化)。SGR 2。SGR 2 — 暗淡 / 减弱
sitmenter_italics_mode\x1b[3m斜体。多数现代终端支持,Linux 控制台与 `cmd.exe` 不支持。SGR 3 — 斜体
ritmexit_italics_mode\x1b[23m在不清除其他属性的前提下关闭斜体。SGR 3 — 斜体
smulenter_underline_mode\x1b[4m开启下划线。SGR 4。SGR 4 — 下划线
rmulexit_underline_mode\x1b[24m关闭下划线(SGR 24),其他属性保留。SGR 4 — 下划线
blinkenter_blink_mode\x1b[5m慢闪烁。iTerm2 / kitty 等默认关闭;通常体验不佳,建议改用颜色变化。SGR 5 — 闪烁(慢速)
reventer_reverse_mode\x1b[7m反相视频 —— 前景色与背景色对调。SGR 7。SGR 7 — 反相显示
smsoenter_standout_mode\x1b[7mStandout —— 历史上与反相不同,现代终端统一映射为 SGR 7(反相)。SGR 7 — 反相显示
rmsoexit_standout_mode\x1b[27m通过 SGR 27 退出 standout / 反相,仅清除该属性。SGR 7 — 反相显示
invisenter_secure_mode\x1b[8m隐藏文本(SGR 8)。可用于显示掩码密码,但仍可被复制。SGR 8 — 隐藏 / 不可见

颜色

tput 能力名terminfo 全称序列说明
setafset_a_foregroundvaries按索引设置前景色。`tput setaf 1` → `\x1b[31m`(红);`tput setaf 9` → `\x1b[91m`(亮红);256 色与 TrueColor 终端接受更高索引。SGR 30–37 — 前景色(8 种基础色)
setabset_a_backgroundvaries按索引设置背景色 —— `setaf` 的镜像。SGR 40–47 — 背景色(8 种基础色)
oporig_pair\x1b[39;49m将前景色与背景色同时恢复为终端默认,不影响其他 SGR 状态。SGR 39 — 默认前景色

光标

tput 能力名terminfo 全称序列说明
cupcursor_addressvaries将光标移动到 (row, col);terminfo 层 0 索引,最终输出为 1 索引的 `\x1b[<r+1>;<c+1>H`(CUP)。CUP — 设置光标位置
homecursor_home\x1b[H光标回到 (1, 1)。CUP — 设置光标位置
cuu1cursor_up\x1b[A向上 1 行(CUU 1)。CUU / CUD / CUF / CUB — 移动光标
cud1cursor_down\n向下 1 行 —— 多数现代 terminfo 中即为 `\n`(LF)。多行使用参数化 `cud`:`\x1b[NB`。CUU / CUD / CUF / CUB — 移动光标
cuf1cursor_right\x1b[C向右 1 列(CUF 1)。CUU / CUD / CUF / CUB — 移动光标
cub1cursor_left\b向左 1 列 —— terminfo 通常映射为裸 BS(`\b`,0x08)。多列使用 `cub`:`\x1b[ND`。CUU / CUD / CUF / CUB — 移动光标
hpacolumn_addressvaries在当前行移动到指定列 —— `\x1b[<col+1>G`(CHA)。CHA — 光标水平绝对位置(列)
civiscursor_invisible\x1b[?25l隐藏文本光标。退出时务必配套 `cnorm`。DECTCEM ?25 — 显示/隐藏光标
cnormcursor_normal\x1b[?25h恢复文本光标(DECTCEM ?25h)。DECTCEM ?25 — 显示/隐藏光标
scsave_cursor\x1b7保存光标位置(DECSC)。与 `rc` 配套。DECSC / DECRC — 保存与恢复光标
rcrestore_cursor\x1b8恢复 `sc` 之前保存的光标位置(DECRC)。DECSC / DECRC — 保存与恢复光标

擦除

tput 能力名terminfo 全称序列说明
clearclear_screen\x1b[H\x1b[2J光标归位后清除整个显示区域(ED 2)。shell 命令 `clear` 最终发送的就是它。ED — 清屏 (`\x1b[2J`)
edclr_eos\x1b[J从光标位置擦除到显示区域末尾(ED 0,默认)。ED — 清屏 (`\x1b[2J`)
elclr_eol\x1b[K从光标位置擦除到行尾(EL 0)。进度条惯用「`\r` + `el`」。EL — 行内擦除 (`\x1b[K`)
el1clr_bol\x1b[1K从行首擦除到光标(EL 1)。EL — 行内擦除 (`\x1b[K`)

屏幕 / 模式

tput 能力名terminfo 全称序列说明
smcupenter_ca_mode\x1b[?1049h进入备用屏幕缓冲。`vim`、`less`、`htop`、`top` 启动时发送它。DECSET 1049 — 备用屏幕缓冲
rmcupexit_ca_mode\x1b[?1049l离开备用屏幕缓冲 —— 恢复原缓冲与光标。DECSET 1049 — 备用屏幕缓冲
resetreset_1string (rs1)\x1bc终端硬重置 —— 发送 RIS(`\x1bc`)。`tput reset` 与 `reset(1)` 最终发送的内容。RIS — 重置到初始状态(终端硬重置)

输入(键盘)

tput 能力名terminfo 全称序列说明
kcuu1key_up\x1b[A (\x1bOA in DECCKM application mode)上方向键。常规光标键模式发 `\x1b[A`;应用通过 `smkx` 打开 DECCKM 后发 `\x1bOA`(SS3)。vim、less 等同时绑定两形。CUU / CUD / CUF / CUB — 移动光标
kcud1key_down\x1b[B (\x1bOB in app mode)下方向键。DECCKM 切换同 `kcuu1`。修饰键在末字母前以 `;<mod>` 追加:Shift+Down = `\x1b[1;2B`。CUU / CUD / CUF / CUB — 移动光标
kcub1key_left\x1b[D (\x1bOD in app mode)左方向键。Bash readline 默认把 `\e[D` 绑到 `backward-char` —— 同字节流,只是在输入侧解读。CUU / CUD / CUF / CUB — 移动光标
kcuf1key_right\x1b[C (\x1bOC in app mode)右方向键。在 `bindkey`/`inputrc` 中与 `kcub1`(左)配对,绑定 `forward-char`/`backward-char`。CUU / CUD / CUF / CUB — 移动光标
khomekey_home\x1bOH (or \x1b[1~ on rxvt-class)Home 键。xterm 类发 `\x1bOH`(SS3 H);rxvt 类发 `\x1b[1~`。多数 readline 配置同时绑 `\e[H`。CUP — 设置光标位置
kendkey_end\x1bOF (or \x1b[4~ on rxvt-class)End 键。xterm 类 `\x1bOF`;rxvt 类 `\x1b[4~`。在输入绑定表中与 `khome` 配对。CUP — 设置光标位置
kppkey_ppage\x1b[5~PageUp。`5~` 的 CSI 波浪号编码在 xterm / rxvt / Linux 控制台间通用。修饰键:Shift+PgUp = `\x1b[5;2~`。
knpkey_npage\x1b[6~PageDown。与 `kpp` 镜像,选择子 `6`。Linux 控制台在某些模式下可能发遗留的 `\x1b[G` —— 查 `infocmp linux`。
kbskey_backspace\x7f (or \x08 on Linux console / cmd.exe)退格。著名分叉:xterm / iTerm2 / Windows Terminal 发 `\x7f`(DEL);Linux 控制台 + cmd.exe 发 `\x08`(BS)。inputrc 中应同时绑两者。
kdch1key_dc\x1b[3~Delete 键(向前删,不是退格)。`3~` 选择子。Shift+Delete = `\x1b[3;2~`。勿与 `kbs` 混淆。
kich1key_ic\x1b[2~Insert 键。`2~` 选择子。部分模拟器(macOS Terminal)无物理 Insert 键,但仍可由 fn-Enter 或自定义快捷键触发 `\x1b[2~`。
kf1key_f1\x1bOPF1。F1–F4 用 SS3 形(`\x1bO` + 字母 `P`/`Q`/`R`/`S`)—— DEC VT100 Help / Do 键的历史遗留。F5+ 改用 CSI 波浪号。
kf5key_f5\x1b[15~F5。带跳号的 CSI 波浪号编码登场:F5=`15~`、F6=`17~`(跳 16)、F7=`18~`、F8=`19~`、F9=`20~`、F10=`21~`、F11=`23~`(跳 22)、F12=`24~`。
kf12key_f12\x1b[24~F12。F 键家族尾端。现代键盘鲜有 F13+ 物理键,但 terminfo 定义到 kf63 —— 按 xterm 传统这些是组合键重映射(Shift+F1 = F13,等)。
smkxkeypad_xmit\x1b[?1h\x1b=**进入**应用键盘模式 —— 翻 DECCKM(`\x1b[?1h`)让方向键发 SS3 形(`\x1bOA`..),再 DECKPAM(`\x1b=`)让数字键盘发带 SS3 前缀码。vim / less / fzf 启动时发此串。DECKPAM / DECKPNM — 小键盘应用 / 数字模式(ESC = / ESC >)
rmkxkeypad_local\x1b[?1l\x1b>**退出**应用键盘模式 —— DECCKM 关(`\x1b[?1l`)+ DECKPNM(`\x1b>`)。应用退出时**应当**发此串;vim 崩溃 / 偷懒的 SIGINT 处理器跳过此步会把终端留在应用模式(方向键发 `\eOA` 而非 `\e[A`,破坏 readline 风格输入)。DECKPAM / DECKPNM — 小键盘应用 / 数字模式(ESC = / ESC >)

用法

在任何类 Unix 系统上,`infocmp -1 <term>` 会输出该终端的完整能力表。脚本中使用 `tput <cap>` 会基于 `$TERM` 查询并输出字节,可在 xterm / Linux console / macOS Terminal / kitty / wezterm 间可移植运行,对 dumb 终端也能优雅降级。

# print the underlying escape for any cap:
infocmp -1 xterm-256color | grep -E '^\s(setaf|cup|civis|smcup)='

# emit a cap from a shell script:
RED=$(tput setaf 1)
BOLD=$(tput bold)
RESET=$(tput sgr0)
printf '%s%serror:%s permission denied\n' "$BOLD" "$RED" "$RESET"