読者です 読者をやめる 読者になる 読者になる

Perl屋さんに便利なVim Pluginを2つ書いた

この記事は 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

f:id:y_uuki:20121222212104p:plain

:Unite perl/local

f:id:y_uuki:20121222212057p:plain


注意事項

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さんです.
よろしくお願いします.