跳到主要内容
ansicode

ICH — 插入字符(CSI Pn @)

把当前行剩余内容右移 N 格并以空白填充间隙 —— vim 插入模式的底层原语。

字节形式

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

\\x1b[\x1b[Pn@
\\033[\033[Pn@
\\e[\e[Pn@
ESC [ESC [ Pn @
hex1b 5b <Pn> 40

说明

Insert Character。末字节 `@`(0x40)—— 在当前行内,把光标位置及其右侧每个单元向右移动 `Pn` 格(默认 1);越过右边界的单元被丢弃,光标处出现 `Pn` 宽的间隙,用空格(SP,0x20,携带当前 SGR 背景色)填充。光标位置不变。ICH 是 `vim` 插入模式每键一击发送的底层原语 —— 不使用 ICH 就得为每次击键重绘整行,使用后屏幕更新降为每字符 O(1)。与 DCH(`\x1b[Pn P`)成对(删除)。ICH 受右边距(若设定了 DECSTBM 列边距)约束 —— 右边距外的单元不会被推入。terminfo 能力名为 `ich1`(Pn=1)或 `ich`(带参数)。

规范出处: ECMA-48 §8.3.64 (ICH)

示例

bash
# Move cursor to column 5, insert 3 cells, then type 'xyz' (it lands at col 5).\nprintf 'Hello world\033[5G\033[3@xyz'
python
import sys; sys.stdout.write('\x1b[3@')   # open a 3-cell gap at the cursor
go
fmt.Print("\x1b[3@")
javascript
process.stdout.write('\x1b[3@')
c
printf("\x1b[3@");

终端支持

xterm
支持
Linux console (fbcon)
支持
macOS Terminal.app
支持
iTerm2
支持
Windows Terminal
支持
cmd.exe / ConPTY
部分
kitty
支持
alacritty
支持
WezTerm
支持
Ghostty
支持
GNOME Terminal
支持
Konsole
支持
tmux
不支持
GNU screen
不支持

相关序列

在家族食谱中

CSI 食谱 · 6. 插入 / 删除 / 光标形状 —— IL / DL / ICH / DCH / ECH + DECSCUSR