カーソル後方タブ移動 (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______|