Perl
Vim

cartonでライブラリ管理してるperlプロジェクトでvimを良い感じにする

More than 5 years have passed since last update.

Perlのプロジェクトでcartonを使っているとだいたい以下のようなディレクトリ構成になる。

project_root

├── local
│   └── lib
│   └── perl5
│      └── darwin-2level # macの場合
└── lib

vimでperlを開くといろいろと良い感じにしてくれるが、多くの場合システムの @INC を使うため不都合を被る場面がでてくる。


thinca/vim-localrc

使うのは thinca/vim-localrc

project_rootに.local.vimrcを作ってそこに色々と書いていく


gfで正しいファイルに飛べない問題

vimはgfでカーソル以下にあるファイルに飛ぶ機能がある。perlを開いていればそのモジュールに飛ぶ。しかし @INC には入っていないので飛ぶことができない。

これを解決するのは .local.vimrc に下記のように書く。


.local.vimrc

set path=/path/to/project_root/lib,/path/to/project_root/local/lib/perl5,/path/to/project_root/local/lib/perl5/darwin-2level



確認

lib以下のpmファイルを適当に開いて

:set path?

を確認して .local.vimrc で設定した内容になっていればOK

これで


lib/Foo/Bar.pm

use Foo::^Baz;   # ^ にカーソルがある


この状態で gf と打てば project_root/lib/Foo/Baz.pm に画面が遷移する。cartonでインストールしたpmでも大丈夫


syntasticでライブラリが見つけられない問題

syntasticには use しているライブラリの存在確認機能があるが carton 内のやつを見つけられないので、保存のたびにエラーが出る。

これに対しては以下を追記する。 g:syntastic_perl_lib_path に関しては syntastic/syntax_chekers/perl.vimを参照


.local.vimrc

let g:syntastic_perl_lib_path = "/path/to/project_root/lib,/path/to/project_root/local/lib/perl5,/path/to/project_root/local/lib/perl5/darwin-2level"