昨日書いたvimでPHPを編集中、1秒で文法チェックする方法 – /halt/Snapshotですが、ゆどうふさんが自分流・vimでPHPを編集中、1秒で文法チェックする方法 – ゆどうふろぐというエントリでシンプルな方法を提示してて、
&ftじゃないのは故意です。PHP以外の時に間違って-l付きで実行ってなんかやだなと思ったので。
な に か も ん だ い で も ?
という話がありますが、これ。.vimrcに設定を書くから起こる問題なんですよね。
.vimrcに設定を記述すると、どのファイルタイプでも関係なく実行される為、ゆどうふさんの書き方だと、Rubyを編集しててもphpのlintが走る事になります。「,l」はlintという意味でmapしてんのにそのファイルタイプにあったlintができないなんてイミナサス。かといってifで&ft見て状況に応じてmapを切り換えるのもダサス。
結論は
:h ftplugins
を見ろ。という話。
.vim/ftplugin/php.vim
というファイルを作ると、そこに書かれた設定はファイルタイプがphpの場合のみロードされるようになります。ここに、ゆどうふさんの設定を書いておけばphpファイルを開いた時だけphpでlintできるようになるわけです。
私のftplugin/ruby.vimには
nmap ,l :call RubyLint()<CR>
""
" RubyLint
"
function RubyLint()
let result = system( &ft . ' -c ' . bufname(""))
echo result
endfunction
と書かれているので、rubyを編集している時に,lするとrubyのsyntaxcheckが走るようになってます。
というか、mapに限らずプラグインのロードなんかもftpluginで分岐させましょう。phpで使うプラグインが他のファイルタイプの時に使えても無意味です。たくさんプラグイン入れると重くなるとかゆってるのは関係ないプラグインをロードしてるんじゃ?
私の場合、各ファイルタイプごとの設定は(一部実行順序を気にする必要のある設定を除いて).vimrcから外して書いているので、.vimrcは451行しかないです。
というわけで.vimrcがデカい自慢をする人は大抵初心者なんじゃね?
Related posts:
僕は逆にすべて.vimrcにautocmd BufReadとかで書くことにしてます。autocmd BufNewFile,BufRead *.php :map :!php %:p
みたいな感じで。
ftpluginに書くよりも、管理するファイルが少なくてすむので、何台もマシンがある場合はとても便利です。
なるほどー。ファイル数を少なくしたいというのであればそういうやり方はありですよね。
自分の場合syntaxの事を考えると.vimrcだけじゃどうしようもないので.vimの下はファイルだらけになっちゃってます。