光标后退制表 (CBT)

将光标向左移动 `n` 个制表位。

  1. 0x1B
    ESC
  2. 0x5B
    [
  3. ____
    n
  4. 0x5A
    Z

此操作的最左有效列是第一列。如果启用了 原点模式,则此操作的最左有效列是 左边距。

向左移动光标,直到光标位于制表位上。如果光标将移过最左有效列, 则光标停留在最左有效列,操作完成。重复此过程 n 次。

制表位是动态的,可以通过诸如 水平制表设置 (HTS)、制表符清除 (TBC) 等 转义序列设置。终端模拟器可以将制表位默认设置在任何间隔, 不过 8 个空格的间隔最常见。

校验

CBT V-1:左移越过第一列

printf "\033[?5W" # reset tab stops
printf "\033[10Z"
printf "A"
|Ac________|

CBT V-2:从制表位之后开始左移

printf "\033[?5W" # reset tab stops
printf "\033[1;10H"
printf "X"
printf "\033[Z"
printf "A"
|________AX|

CBT V-3:从制表位上开始左移

printf "\033[?5W" # reset tab stops
printf "\033[1;9H"
printf "X"
printf "\033[1;9H"
printf "\033[Z"
printf "A"
|A_______X_|

CBT V-4:原点模式下的左边距

printf "\033[1;1H" # move to top-left
printf "\033[0J" # clear screen
printf "\033[?5W" # reset tab stops
printf "\033[?6h" # enable origin mode
printf "\033[?69h" # enable left/right margins
printf "\033[3;6s" # scroll region left/right
printf "\033[1;2H" # move cursor in region
printf "X"
printf "\033[Z"
printf "A"
|__AX______|