web-dev-qa-db-ja.com

bashで4つのスペースタブを設定する方法

VIMではset tabstop=4のように見えますが、設定方法がわかりませんbash

例えば:

echo -e "1234567890\t321\n1\t2\n123\t1"

現在の出力:

1234567890      321
1       2
123     1

次のような出力が必要です。

1234567890  321
1   2
123 1

cat somefilephp -r 'echo "\t123";'のように、どこにでも表示できます

Bashでタブ幅を設定するにはどうすればよいですか?

26
Zheng Kai

これはシェル(またはphpやcat)のプロパティではありません。出力を管理するのは端末です。

tabs コマンドを使用して動作を変更します。

$ tabs 4

$ echo -e "a\tb"      
a   b
$ tabs 12

$ echo -e "a\tb" 
a           b

tabsはPOSIXで指定されており、上記の出力は「偽装」されています。2つの文字の間のタブ文字のままです。)

53
Mat

tabsユーティリティを使用して、定期的または不定期の間隔を設定できます。 catを使用して既にタブが含まれているファイルを出力するか、自分で制御しないプログラムの出力を使用して、独自の出力を行うかどうかに関係なく機能します。

ただし、出力を制御している場合は、printfではなくechoを使用し、タブではなくフォーマット文字列を使用することをお勧めします。

$ printf '%-12s%8.4f %-8s%6.2f\n' 'Some text' 23.456 'abc def' 11.22
Some text    23.4560 abc def  11.22
$ format='%*s%*.*f %*s%*.*f\n'
$ printf "$format" -12 'Some text' 8 4 23.456 -8 'abc def' 6 2 11.22
Some text    23.4560 abc def  11.22

他の誰かがtabsユーティリティを使用してプログラムの出力を制御できるようにしたい場合を除きます。

1

Settermを使用してこれを設定できます

setterm -regtabs 4

私はそれを自分の.bash_profileに入れましたが、特にbash関連ではありません

0
carpii