BashでC ++出力のタブ幅を設定する

BashでC ++出力のタブ幅を設定する

c++タブを使用して、"\t"出力を人間が読める列に整理するプログラムがあります。しかし、Bashの8列の幅の列は私には狭すぎます。どのように増やすことができますか?

メモ:C++フォーラムでは、人々は次のように言います。「C++は文字だけを出力し、目に見える出力は責任を負いません。」。 Linuxフォーラムでは、人々は次のように言います。「おそらく端末に出力するために使用するプログラムは責任があるでしょう。less

答え1

C ++でさまざまな方法(ncursesなど)でアクセスできるターミナルデータベースを使用して、ターミナルのタブストップを変更できます。シェルを使用してシェルからアクセスすることもできますtput

まず、タブ()を消去する必要がありますtput tbc。次に、タブストップを追加する各列(tput hpa 10たとえば、列10)にカーソルを移動します。最後に、タブストップ(tput hts)を設定します。必要なタップ停止ごとに位置決めとタップ停止設定を繰り返します。例:

echo -e '0\t1\t2\t3\t4\t5\t6\t7\t8'
tput tbc
for ((i=0; i<`tput cols`; i+=10)); do
    tput hpa $i
    tput hts
done
tput hpa 0
echo -e '0\t1\t2\t3\t4\t5\t6\t7\t8'

答え2

したがって、印刷されたタブ文字はプログラムのソースコードに固定されます。 Bashのタブ表示はシェル設定で編集できないと思います。

ここでは推測だけですが、タブ文字の表現は、端末プログラムが使用する文字エンコーディングセットに組み込まれていると思います。 ASCII 文字セットはタブ文字を定義しますが、UTF-8 文字セットはタブ文字を定義します。そうではない。私はどの文字エンコーディングセットもタブに異なる幅を使用しないと思います。だから、自分だけの文字セットを書いて使っていない限り運が良くないと思いますが、頭痛のように聞こえます。

代わりにコマンドを試してみましたprか?

PR(1) ユーザーコマンド PR(1)

namepr - 印刷用のテキストファイル変換

タブを10個のスペースに置き換えるには、次のようにします。

./a.out | pr --expand-tabs=10 -t

答え3

C++ は幅に対して責任を負いません。長く返信を書いたのにテストしてみると本当に不要になりましたね…

デフォルトではtabs(ncurses5パッケージの一部)を使用してください...例:

zsh> tabs 4 # 4 space width tabs
zsh> ./a.out

これにより、希望の幅に自動フォーマットされます。配管は必要ありません(対話型作業がある場合は役に立ちません)。

答え4

他の答えからわかるようにtabsユーティリティはより簡単な方法です指定するタブストップは、独自のタブストップを設定しないアプリケーション(シェルなど)用です。 POSIX は以下を指定します。tabsユーティリティ、(およびtputtput)、しかし、その目的のためのterminfoや動作については言うまでもありません。 (X / Open Cursesは別の標準なので、言うことがあります)。

ただし、これらのタブストップを使用するには、端末がハードウェアタブストップを有効にしていることも確認する必要があります。そうすればstty -atab0、出力で次を見つけます。

speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

マニュアルによると、またはをstty設定できる必要があります。 POSIXはとを定義しますが、(ハードウェアタブ)と(ソフトウェアタブ)のみが便利です。tab0tab3tab1tab2tab0tab3

tab0 tab3
タブ拡張戦略を選択します。 tab0中にタブ拡張を無効にします。tab3有効にしてください。

追加資料:

関連情報