5.1 タブ位置の整列を保持する
タブ文字はカーソルを次のタブ位置へ移動します。タブ位置は通常、表示の8桁ごとにあります。これは --tabsize=columns オプションで変更できます。
diff の出力形式の中には、挿入・削除・変更を示す1文字または2文字がテキスト行の前に付くものがあります。これらの文字が加わると、タブが次のタブ位置へ進み、行の列の位置がずれることがあります。GNU diff は、タブで揃えた列を正しく整列させる方法を2つ提供します。
1つ目は、diff が出力前にすべてのタブを適切な数の空白に変換する方法です。--expand-tabs(-t)オプションで選択します。この形式の出力を patch で使うには、patch に -l または --ignore-white-space オプションを指定する必要があります(詳しくは 空白を変更したパッチの適用 を参照)。
もう1つは、行頭の変更種別を示す文字の後に、空白ではなくタブ文字を加える方法です。後続のすべてのタブ文字が、元のファイルと同じタブ位置に対する相対位置に来るため、出力が正しく整列します。欠点は、長い行がさらに長くなり、画面や紙の1行に収まらなくなることです。また、変更種別を示す文字の後に空白がない unified 出力形式では機能しません。-T または --initial-tab オプションで選択します。
GNU diff は現在、出力装置がタブ位置を守り、各文字をOSが指定した列幅で表示し、文字コードのエラーを含む各バイトを1桁で表示すると仮定しています。残念ながら、文字コードのエラーや非ASCII文字ではこの仮定が成り立たないことが多く、複雑な入力データは出力で正しく整列しない場合があります。--ignore-tab-expansion(-E)オプションに基づく解析も、表示装置の動作と異なる場合があります。