この記事は Vim Advent Calendar 2012 の22日目の記事です.
21日目は @AmaiSaeta さんの 「このVim plugin達に感謝しなければ年を越せない!私が今年使い倒した2012年のベストを全部ご紹介! 」 でした.
最近,Vim Scriptを書き始めていて, 今回は,Perl的に便利なVim Pluginを2つ書いたのでご紹介します.
unite-perl-module.vim
GitHub y-uuki/unite-perl-module.vim
unite-perl-module.vim はClass::Acceccor::Liteなどのモジュール名をUniteのインタフェースで検索し,選択したモジュール名をカーソル位置に書き込むPluginです.
Linda_pp先生のunite-ruby-require.vimを参考にして作りました.
機能は以下の2つです.
- perl/global: 標準モジュールおよびcpanmなどでインストールしたモジュールの検索
- perl/loccal: プロジェクト内のモジュールおよびcartonやlocal::libでインストールしたモジュールの検索
インストール
unite.vimをインストールしてください.
NeoBundleなどで本プラグインをインストールしてください.
NeoBundle "y-uuki/unite-perl-module.vim"
使い方
:Unite perl/global
:Unite perl/local
注意事項
VimのカレントパスがHOMEなどのディレクトリ以下に大量のファイルがあるところでは,perl/globalの実行時間が遅くなってしまう問題があります. これは,perl/global内で使用している cpan -l コマンドが,カレントディレクトリ以下のモジュールを再帰的に探しに行ってしまっているためだと思います.
perl-local-lib-path.vim
GitHub y-uuki/perl-local-lib-path.vim
プロジェクト内のモジュールやcartonでインストールしたモジュールにはVimのpathが通っていないので,gfでファイル間移動ができないという問題があります.
perl-local-lib-pathは,現在のプロジェクト内のモジュールやcartonでインストールしたモジュールに自動でpathを通します.
インストール
依存するプラグインは特にありません. NeoBundleなどで本プラグインをインストールしてください.
NeoBundle "y-uuki/perl-local-lib-path.vim"
使い方
vimrcに以下のような設定を書きます.
g:perl_local_lib_path = "vendor/lib" "" 任意 autocmd FileType perl PerlLocalLibPath
g:perl_local_lib_path にはプロジェクトルート・ディレクトリ(.gitがあるディレクトリなど)からのモジュールディレクトリへの相対パスを指定することができます. 何も指定しなくても,デフォルトで'lib','local/lib/perl5'と'extlib'をモジュールディレクトリとして判定します.
これで,project-root/local/lib/perl5/Plack/Request.pmのようなcartonで管理されたモジュールにもジャンプできるようになります.
参考
紹介した2つのプラグインではどちらも自動でプロジェクトルートの判定を行なっています. プロジェクトルートと同じディレクトリに".git", ".gitmodules","Makefile.PL","Build.PL"があればプロジェクトルートとして判定しています. このあたりは,id:antipopさんのProject::Libsを参考にしました.
carton周りのVimの話は@taka84u9 さんの
を参考にしました.
明日の担当は @mfumi2さんです.
よろしくお願いします.