2016年6月29日水曜日

Vimでハードタブをソフトタブに変換する

タブにまつわるコーディングルールは色々とあるけれど、個人的にはソフトタブを好んで使っており、また今の職場もルール上、ソフトタブを使うことになっている。が、たまにルール外の世界から持って来たコードにハードタブを見つけたりすると、その場で変換することになる。

expandコマンドを使える真っ当な環境なら、素直にそれを使えばいい。OS Xを含むUnix系の環境なら当たり前のように使える。これまでVimでは

:%!expand -t4
とかやって来た。が、好き勝手にCygwinを入れたりできないような厳しい職場のWindowsだと、困ったことにこの手を使えない。で、これまでメンドクセーと思いながらもLinuxマシンに持って行って変換していたのだが、Vim組み込みの機能でできることを今更知った。

使うのはズバリ

:retab
:set expandtab状態で:retabすればハードタブがソフトタブになる。

逆に:set noexpandtab状態で:retabすれば、ソフトタブがハードタブになる、…と言いたいところだが、ちょっと癖がある。help retabから引用すると、

Replace all sequences of white-space containing a <Tab> with new strings of white-space using the new tabstop value given.
ハードタブが含まれたホワイトスペースでないと変換してもらえない。ハード・ソフト混在の気持ち悪いソースには使えるけど、きちんとソフトタブに統一されたソースは、:retabではハードタブに変換できない。ただ、手段がないわけではなく、
With !, Vim also replaces strings of only normal spaces with tabs where appropriate.
:retabの代わりに
:retab!
すればOK。

0 件のコメント:

コメントを投稿