vim × Perl のコンパイルを簡単にするコマンドと設定 (Perl.vim)

perl.vimコンパイラプラグインで、Perlコードをクィックフィックスする。 — 名無しのvim使いのエントリーを読んで、
デフォルトでPerl.vimが入ってるという事を知ったのが数週間以上前。
便利すぎてすごくショックだったのでメモメモ。

Perl.vimとはなにか

概要

compilerディレクトリにあるperl.vimコンパイラプラグインを使うと、
Perl言語で書かれたコードの文法チェックと、QuickFixリストを利用したコードの修正作業を手早く行えます。


インストール方法

perl.vimコンパイラプラグインは、デフォルトでインストールされています。
perl.vimコンパイラプラグインで、Perlコードをクィックフィックスする。 — 名無しのvim使い


1) Perlコンパイラの選択
:compilerでコンパイラの選択 vim docs

:comp[iler][!] {name}           コンパイラ{name}を使うときに機能するオプション
                                を設定する。"!"オプションがない場合は現在のバ
                                ッファに対して設定される。"!"がある場合はグロ
                                ーバルオプションが設定される。
                                "file.foo"で":compiler foo"とし、その後別のバッ
                                ファで":compiler! bar"としたとき、Vimは"file.fo
                                o"では"foo"を使い続ける。
                                {|+eval|機能なしでコンパイルされた場合には使用
                                できない}

"compiler"ディレクトリ内にあるVimプラグインによって、選択されたコンパイラを使
うためのオプションが設定される。":compiler"はローカルオプションを設定し、"compi
ler!"はグローバルオプションを設定する。

vimのバッファを開き、Perlコンパイラを指定する

:compiler perl  


毎回指定するのはめんどくさいので.vimrcにautocmdで以下の内容を追加
.vimrc

"コンパイラの指定
autocmd FileType perl,cgi :compiler perl  

2) :makeコマンドを使ってPerlシンタックスチェックを行う
:makeの使い方 vim docs

:mak[e][!] [arguments]  

1. vimが|+autocmd|つきでビルドされているならば、|QuickFixCmdPre|に関連付けられた自動コマンドが全て実行される。
2, オプション'autowrite'がonならば変更のあるバッファは保存される。


.vimrcにautocmd設定したので
そのままPerlファイルを開いただけで:compiler perl指定をせずに:makeが実行可能になる。

:make      ":!perl -c <ファイル名>と同じ



3) :cwで(QuickFix window)エラーの確認 vim doc

:cw[indow] [height]     認識されたエラーがあるときQuickFixウィンドウを開く。
                        ウィンドウがすでに開いていて認識されたエラーがない
                        場合はウィンドウを閉じる。

エラーがあれば、エラー結果がQuickFixリストに入る。



※ :clでエラーの一覧を表示する vim docs


:cl[ist] [from] [, [to]]
                        有効なエラーを全て列挙する|quickfix-valid|。[from]及び
                        もしくは[to]で行数を指定された場合、その範囲のエラーが
                        表示される。負であった場合最後のエラーから数える。-1
                        が最後のエラーとなる。設定'switchbuf'がバッファの移動
                        に関係する。

※ エレガントな保存とデバッグ方法
保存(:w)して実行(:!perl ファイル名)よりもよっぽど楽。時間で自動保存もできるけど、とりあえずこれだけ。

一気に保存して実行する

:w !perl


むしろ私は.vimrcにF4,F5キーに上記のコマンドを割り当てて*1います
.vimrc

":w + !perl command
map <F4>  :w !perl<CR>

"!perl command
map <F5>  :!perl %<CR>


:compilerで対応しているコンパイラの一覧を確認できます

MacPortsのvim7.2での実行結果
/opt/local/share/vim/vim72/compiler/decada.vim
/opt/local/share/vim/vim72/compiler/dot.vim
/opt/local/share/vim/vim72/compiler/eruby.vim
/opt/local/share/vim/vim72/compiler/fortran_F.vim
/opt/local/share/vim/vim72/compiler/fortran_cv.vim
/opt/local/share/vim/vim72/compiler/fortran_elf90.vim
/opt/local/share/vim/vim72/compiler/fortran_g77.vim
/opt/local/share/vim/vim72/compiler/fortran_lf95.vim
/opt/local/share/vim/vim72/compiler/fpc.vim
/opt/local/share/vim/vim72/compiler/gcc.vim
/opt/local/share/vim/vim72/compiler/gnat.vim
/opt/local/share/vim/vim72/compiler/hp_acc.vim
/opt/local/share/vim/vim72/compiler/icc.vim
/opt/local/share/vim/vim72/compiler/intel.vim
/opt/local/share/vim/vim72/compiler/irix5_c.vim
/opt/local/share/vim/vim72/compiler/irix5_cpp.vim
/opt/local/share/vim/vim72/compiler/javac.vim
/opt/local/share/vim/vim72/compiler/jikes.vim
/opt/local/share/vim/vim72/compiler/mcs.vim
/opt/local/share/vim/vim72/compiler/mips_c.vim
/opt/local/share/vim/vim72/compiler/mipspro_c89.vim
/opt/local/share/vim/vim72/compiler/mipspro_cpp.vim
/opt/local/share/vim/vim72/compiler/modelsim_vcom.vim
/opt/local/share/vim/vim72/compiler/msvc.vim
/opt/local/share/vim/vim72/compiler/neato.vim
/opt/local/share/vim/vim72/compiler/onsgmls.vim
/opt/local/share/vim/vim72/compiler/pbx.vim
/opt/local/share/vim/vim72/compiler/perl.vim
/opt/local/share/vim/vim72/compiler/php.vim
/opt/local/share/vim/vim72/compiler/pyunit.vim
/opt/local/share/vim/vim72/compiler/rspec.vim
/opt/local/share/vim/vim72/compiler/rst.vim
/opt/local/share/vim/vim72/compiler/ruby.vim
/opt/local/share/vim/vim72/compiler/rubyunit.vim
/opt/local/share/vim/vim72/compiler/se.vim
/opt/local/share/vim/vim72/compiler/splint.vim
/opt/local/share/vim/vim72/compiler/tcl.vim
/opt/local/share/vim/vim72/compiler/tex.vim
/opt/local/share/vim/vim72/compiler/tidy.vim
/opt/local/share/vim/vim72/compiler/xmllint.vim
/opt/local/share/vim/vim72/compiler/xmlwf.vim

ぱ、Perlだけじゃなくって他の言語にも使えそうですよね。

もっとスマートな方法あれば教えてください><

*1:mapで設定キーがかぶると下にある方が優先されてしまうんですね;