跳到主要内容
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[NBCUU / CUD / CUF / CUB — 移动光标
cuf1cursor_right\x1b[C向右 1 列(CUF 1)。CUU / CUD / CUF / CUB — 移动光标
cub1cursor_left\b向左 1 列 —— terminfo 通常映射为裸 BS(\b,0x08)。多列使用 cub\x1b[NDCUU / CUD / CUF / CUB — 移动光标
hpacolumn_addressvaries在当前行移动到指定列 —— \x1b[<col+1>G(CHA)。CHA — 光标水平绝对位置(列)
civiscursor_invisible\x1b[?25l隐藏文本光标。退出时务必配套 cnormDECTCEM ?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进入备用屏幕缓冲。vimlesshtoptop 启动时发送它。DECSET 1049 — 备用屏幕缓冲
rmcupexit_ca_mode\x1b[?1049l离开备用屏幕缓冲 —— 恢复原缓冲与光标。DECSET 1049 — 备用屏幕缓冲
resetreset_1string (rs1)\x1bc终端硬重置 —— 发送 RIS(\x1bc)。tput resetreset(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;2BCUU / 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-charCUU / CUD / CUF / CUB — 移动光标
khomekey_home\x1bOH (or \x1b[1~ on rxvt-class)Home 键。xterm 类发 \x1bOH(SS3 H);rxvt 类发 \x1b[1~。多数 readline 配置同时绑 \e[HCUP — 设置光标位置
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"