光标前移 (CUF)

将光标向右移动 `n` 个单元格。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x43
    C

参数 n 必须是大于等于 1 的整数。如果 n 小于 等于 0,则将 n 调整为 1。如果省略 n,则 n 默认为 1。

此序列总是取消待定换行状态。

光标可以移动到的最右边界由当前光标列和 右边距 决定。如果光标位于右边距右侧, 则在序列执行期间将右边距修改为屏幕的最右列。光标可位于的最右列就是右边距。

将光标向右移动 n 个单元格,直至并包括最右边界。 此序列永不换行或修改单元格内容。此序列不受 任何终端模式影响。

校验

CUF V-1:待定换行被取消

cols=$(tput cols)
printf "\033[${cols}G" # move to last column
printf "A" # set pending wrap state
printf "\033[C" # move forward one
printf "XYZ"
|_________X|
|YZ________|

CUF V-2:禁用反向换行时的最右边界

printf "A"
printf "\033[500C" # forward larger than screen width
printf "B"
|A________Bc

CUF V-3:右边距左侧

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[1G" # move to left
printf "\033[500C" # forward larger than screen width
printf "X"
|____X_____|

CUF V-4:右边距右侧

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[6G" # move to right of margin
printf "\033[500C" # forward larger than screen width
printf "X"
|_________X|