Viでコードを書いています。テキストpar
フォーマッタ(と似ていますfmt
が、IMHOが良い)形式のブロックコメントです。問題は、par
インデントのためにテキストタブを維持できないことです。フォーマッタはこれを空白に置き換えます。
各行に初期タブがあるファイルと、そのpar
タブを空白に置き換える方法の例を示します。このcat -t
コマンドは、テキストタブを次のように表示します^I
。
$ cat -t example.txt
^I# I'd like to reflow
^I# this paragraph while retaining
^I# the initial tabs. I don't want to end up with
^I# spaces at the start of
^I# these lines.
タブが消えます:
$ par <example.txt | cat -t
# I'd like to reflow this paragraph while retaining the initial
# tabs. I don't want to end up with spaces at the start of
# these lines.
インデントの交換を中止するにはpar
?
par
マニュアルのアドバイスに従って、環境変数をPARINIT
パスワード文字列に設定しましたが、rTbgqR B=.,?'_A_a_@ Q=_s>|
必要な方法で動作するように変更できるかどうかはわかりません。
答え1
フォーマッタはpar
常にタブを空白に拡張し、他に指示することはできません。T
文字が文字列内にある場合、ユーティリティは各タブストップで8つのスペースを使用します$PARINIT
。par
動作方法を変更する代わりに、以下を使用して削除されたタブのインデントを再挿入できます。基準unexpand
便利:
$ par <example.txt | unexpand | cat -t
^I# I'd like to reflow this paragraph while retaining the initial
^I# tabs. I don't want to end up with spaces at the start of
^I# these lines.
これは、元のテキストが複数のタブにインデントされている場合にも機能します。
引数が指定されていない場合、このunexpand
ユーティリティは同じ視覚的なインデントレベルを達成するために、各行の先頭の空白文字を最大タブ文字数に置き換えます。また、インデントレベルで必要に応じてタブの後にスペースを追加します。
Viでは、!par|unexpand
(適切なアドレス指定を前に付ける)を使用してテキストの書式を再指定できます。