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"