Linuxでソース表示時に4タブになっていて欲しいのだが
最近プログラムを書くときは4タブにしているのだが、cat や less でソースを表示させると8タブなのでインデントが乱れる。
expand -4 すればいいのだが面倒。ということで端末のタブを変更することを考える。
タブの展開は確か tty でやってたような記憶があったので、man stty してみたがそれらしいオプションはない。念のためBSDの man stty を見ると、oxtabs というオプションでタブのスペース展開を制御できることがわかった。しかし、Linuxにはそんなオプションはない上に、BSDでもいくつのスペースに展開するのかは指定できないみたい。
ということで、これは端末側で何とかするしかないのか。使っているのは Teratermだ。端末タイプは vt100。
man terminfoで、タブクリアとタブ設定のcapnameを調べる。全タブストップクリアが tbc で、該当位置へのタブストップセットが hts。
tput tbc|hexdump -c と tput hts|hexdump -c で、シーケンスを調べる。あとは、.bash_profile に書くだけ。
echo -e '\e[3g' for((i=0; i<20; ++i)) do echo -e ' \eH\c'; done
タブ間隔を引数にした関数にしたいところだ。と、よく考えればtputのままでもいいのか。
tabset(){ cols=$(tput cols) hts=$(tput hts) len=$(expr length "$hts") tput tbc for((i=0; i<$cols/$1; ++i)) do printf %$(($1+$len))s "$hts"; done printf '\r' unset cols hts len } tabset 4
2009-05-25追記:
くっ! less は自前でタブ展開してるのか。-x4 オプションでOK。