2008年10月1日水曜日

[tab2space]タブ文字をスペースに変換するとき、どうしてる?

SKK諦めて予測入力の出来るPrime使いはじめたcohtanです。

僕はコード書いているときに誰が見ても同じ見た目になることから、タブ文字をスペース4つ分に変換しています。
もちろんスペースキーを4回叩いているわけではなく、タブを押したら勝手にスペース4つ入るように設定しているだけです。

で、ここから本題。

ここにはいない他人が書いたコードにタブコードが入っている時にそれらをスペース4つに置き換えたい。
という状況が発生しました。
しかもここにはいない他人が書いているコードはたくさんあり、数百ファイルあります。

さぁどうするかと。
単純に、1つのタブコードに対して4つのスペースで置換したのでは見た目が変わってしまいます。
というのも、タブコードは文字列の頭を揃えるために使われる事があるので、4スペースの時もあれば、3スペースのときも、2スペースのときも、1スペースのときもあるのです。
なので、エディタにタブコードをスペースに変換する機能が備わっていれば、まず間違いなく文字列の頭を揃えてくれます。

ようは、これを自動で複数のファイルに対して実行したいと。
エディタ側に複数ファイルを一気にに編集する機能がついていれば可能っぽいですが、僕の愛用エディタであるvimではどうやっていいのかわかりません。

そこで、色々調べたところ、どうやらvimにはexモードという機能が存在し、コマンドのみを実行する事が出来るようです。
これをワンライナーで複数ファイルに噛ましてしまえば、エディタ上でタブコードをスペースに変換した時の美しい文字列の頭揃えが出来るはずです。

というわけで、出来たワンライナーがこれ。

find . -name "*.php" -exec ex -c 'ret' -c 'wq' {} \;


この例では、拡張子がPHPのファイルに対して実行しています。
-exec 以降が肝で、


  • ex - vim -e と同様。Exモードっというらしく、指定ファイルにコマンドを発行出来る。

  • -c はコマンドを引数で指定するオプション。+でもいいみたいだけど、findに+を渡すと怒られてしまった。



ようするに、:retして、:wqしてるだけなんです。
これを、カレントディレクトリ以下の*.phpに対してやってるだけ。

自前で文字列カウントしながらスペース変換やろうとすると結構めんどくさい気がするので、これはなかなか便利そう。
これでvimのコマンド部分だけを使って複数ファイルをごにょごにょする、なんてことも難しくないですね。

ひとつ悔しいのは、この機能を生粋のEmacserである、id:k1LoW氏から教えてもらったことです。
k1LoW++!

id:teramakoさんのエントリーが大変参考になりました。
ex(vim -e)コマンドを使おう

0 件のコメント:

久しぶりにブログを書く

最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...