最近ちまちまと.vimrcを再構築している @pinzolo です。
Ruby1.9+Railsで開発しているとちょくちょくやらかすのがのがエンコーディングの指定忘れ。
rails g
で作られるファイルはマジックコメントがないので日本語入力して実行したらエラーになるわけですな。
んで世のエンジニアはそれをどう解決するかというのを調べてみた。
- ショートカットで先頭にマジックコメントを埋め込む
- magic-commenterやmagic-encodingのようなツールで一括付与
というのが結構多かった。 でも、1.は忘れることがあるし、2.はジェネレートするたびに行うのはめんどくさい。 じゃあどうするのが一番いいかと考えたら、保存時に追加されるのが一番だと思った。
エディタで保存を実行しないファイルは編集をしないのだからマジックコメントなくても問題無いわけだ。
class HogeHelper
end
こんなファイルはマジックコメントをいちいち付けなくていいや。というスタンスです。 というわけで、.vimrcに保存時にマジックコメントを追加する処理を書いてみた。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" マジックコメント自動追加関数 | |
function! AddMagicComment() | |
let pos = getpos('.') | |
let line_index = 1 | |
let magic_comment = '# coding: utf-8' | |
if &filetype == 'ruby' | |
let line = getline(line_index) | |
if line[0:1] == '#!' | |
let line_index = 2 | |
endif | |
elseif &filetype == 'haml' | |
let magic_comment = '-'.magic_comment | |
elseif &filetype == 'eruby' | |
let magic_comment = '<%'.magic_comment.' %>' | |
endif | |
let line = getline(line_index) | |
if line =~ 'coding:' | |
return | |
endif | |
call cursor(line_index, 0) | |
execute ':normal O'.magic_comment | |
call setpos('.', pos) | |
endfunction | |
autocmd BufWritePre *.rb,*.erb,*.haml call AddMagicComment()<CR> |
vimscriptなんて今までろくに書いたことがなかったからなかなか大変だった。以下、気にしたポイント。
- 対象とするのは ruby, ERB, Haml の三種類。
- ruby の場合は shebang の存在も考慮する。
- すでにマジックコメントが存在する場合は付与しない。
- マジックコメントは 1 行目。shebang があるときは 2 行目。
- マジックコメントの形式は emacs 形式にしようか迷ったけど、自分の環境では vim しか使わないからまあいいや。
ソースコードは間違ってないと思うのだけど、いざ保存すると必ず E488 エラーがでる。
正直なんでかわからん。有識者の方々教えてください。
動作に影響はないからとりあえずこのままにしてる。エラーメッセージがうざかったらとりあえず :silent! つければいいや。
とまあ、微妙に不完全なシロモノですがよければお試しください。