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。