Edited at

vimを使って保存時に楽をする

More than 5 years have passed since last update.


気持ち悪いものは取り除く

プログラマにとって気持ちの悪いものというのはいろいろありますが、これを放置すると虫歯のようにあとで大変なことになる場合があるので早めに除去しましょう。


保存時に行末の空白を除去する

私にとって行末の空白ほど気持ちの悪いものはありませんね。

というわけで、保存時に意識すること無く除去してしまいましょう。

以下のものを.vimrcに記述しましょう。

" 保存時に行末の空白を除去する

autocmd BufWritePre * :%s/\s\+$//ge


保存時にtabを2スペースに変換する

そういえば、TABも気持ち悪いです。

あれは逆にスペース2つで置き換えてしまいたいですね。

そんなときはこんなかんじです。

" 保存時にtabを2スペースに変換する

autocmd BufWritePre * :%s/\t/ /ge


カーソル位置が動くと鬱陶しい

Linda_ppさんのご指摘通り、上記のまま設定するとカーソルが飛んでいってしまうので下記のように纏めて設定すると、とても良いです。

function! s:remove_dust()

let cursor = getpos(".")
" 保存時に行末の空白を除去する
%s/\s\+$//ge
" 保存時にtabを2スペースに変換する
%s/\t/ /ge
call setpos(".", cursor)
unlet cursor
endfunction
autocmd BufWritePre * call <SID>remove_dust()

Linda_ppさん、ありがとうございます!


保存時にRuby1.8 Hashを除去する

さて、そういえばRubyですが1.8から1.9を使うようになり、

Hashの記法が増えました。:hoge => 'fuga'hoge: 'fuga'といったふうに、

Javascriptのように記述できるようになったのでコードの量も減らせます。

となると、ですよ、もう1.8タイプのHash記法が気持ち悪くないですか?

はい、気持ち悪いですね、気持ち悪いです。

なので、これも保存時に自動で置換してしまいましょう。

こちらです。

" 保存時にRuby1.8 Hashを除去する

autocmd BufWritePre * %s/\([^:]\+\):\{1}\([^ :"']\+\)\s=>/\1\2:/ge

コレに関しては、id:heavenshell さんのご指摘通り、ファイル保存時に勝手にやられると困るという場面が多々あります。

(1.8でも動かすgemや、オープンソース活動しているひとなど)

なので、関数などにして呼び出すというのも手ですね。


おわりに

コレ以外にも保存時にいろんな処理をかませることで怠惰なプログラマになることができるので、試してみてはいかがでしょうか。

まあもちろん、デメリットもあります。


デメリット?

大規模なコードをちょこっと変更したときに、すべての行を対象に置換してしまいます。

これはバージョン管理している場合、意味不明の大量の変更が発生することにもなりますので、ご利用は計画的に、といったところでしょうか。

では。