插入字符 (ICH)
在当前光标位置插入空白字符。
- 0x1B
- ESC
- 0x5B
- [
- ____
- n
- 0x40
- @
在当前光标位置插入 n 个空白字符,并将现有
单元格内容右移。
参数 n 必须是大于等于 1 的整数。如果 n 小于
等于 0,则将 n 调整为 1。如果省略 n,则 n 默认为 1。
此序列总是取消待定换行状态。
如果光标位置在 左右边距 之外, 此序列不改变屏幕,但待定换行状态 仍会被重置。
移出右边距之外的现有单元格会被删除。插入的单元格为空白, 其背景色按当前 SGR 状态着色。
如果多单元格字符(如“橋”)因移动而使单元格被拦腰拆分, 多单元格字符可以被裁剪或擦除。典型行为是在 屏幕右边缘裁剪、在右边距处擦除,但两种行为均可接受。
printf "ABC"
printf "\033[1G"
printf "\033[2@"
printf "X"
|XcABC_____|
printf "ABC"
printf "\033[1G"
printf "\033[41m"
printf "\033[2@"
printf "X"
|c_ABC_____|
c_ 个单元格都应有红色背景。ABC 个单元格样式应保持不变。
cols=$(tput cols)
printf "\033[${cols}G"
printf "\033[2D"
printf "ABC"
printf "\033[2D"
printf "\033[2@"
printf "X"
|_______XcA|
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[?69h" # enable left/right margins
printf "\033[3;5s" # scroll region left/right
printf "\033[3G"
printf "ABC"
printf "\033[3G"
printf "\033[2@"
printf "X"
|__XcA_____|
printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[?69h" # enable left/right margins
printf "\033[3;5s" # scroll region left/right
printf "\033[3G"
printf "ABC"
printf "\033[1G"
printf "\033[2@"
printf "X"
|XcABC_____|
cols=$(tput cols)
printf "\033[${cols}G"
printf "\033[1D"
printf "橋"
printf "\033[2D"
printf "\033[@"
printf "X"
|_______Xc_|
在这种情况下,最后一个单元格为空白或对多单元格字符进行裁剪都算有效。xterm 会对该字符进行裁剪,但许多其他终端会擦除该单元格。