Perlモジュール名を指定するとそのソース(.pm
ファイル)を開いてくれるコマンド。已にどっかにありそうな機能ではあるが、勉強のために作ってみた。
使い方
openPM.vim
をpluginディレクトリ(Unix系なら~/.vim/plugins
、Windowsなら$HOME/vimfiles/plguin
)に、searchPM
(WindowsはsearchPM.bat
)をパスの通ったディレクトリに置き、実行権限を与える。そしてVimを起動し、
:OpenPM モジュール名
で、.pm
ファイルが開く。モジュール名が指定されなかった場合は、カーソル下にある文字列を認識して開く。
使用例
こんなファイルでカーソルをここにおいて、
ソース
openPM.vim
function! OpenPM(pm) let pm = a:pm " もしpmがnullなら if !strlen(pm) " カーソル下にある、アルファベット、数字、コロンの組み合わせを " モジュール名として取得 setlocal iskeyword=a-z,A-Z,48-57,_,: let pm = expand('<cword>') setlocal iskeyword< endif " searchPMを使ってファイル名を取得 let pmfile = system('searchPM ' . shellescape(pm)) " 取得できなかったら if !strlen(pmfile) echohl ErrorMsg echo 'ファイルが見つかりません : ' . pm echohl None return endif " ファイルを開く execute 'edit ' . pmfile endfunction command! -nargs=? OpenPM :call OpenPM('<args>')
searchPM
#!/usr/bin/perl use strict; use warnings; $ARGV[0] or exit; ( my $path = $ARGV[0] ) =~ s!(::|-)!/!g; for ( @INC ) { my $pm = "$_/$path.pm"; ( my $pod = $pm ) =~ s!pm$!pod!; my $file = -f $pm ? $pm : -f $pod ? $pod : undef; if ( $file ) { print $file; last; } }
searchPM.bat (Windows用)
@rem = '--*-Perl-*-- @echo off if "%OS%" == "Windows_NT" goto WinNT perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9 goto endofperl :WinNT perl -x -S %0 %* if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl if %errorlevel% == 9009 echo You do not have Perl in your PATH. if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul goto endofperl @rem '; #!/usr/bin/perl #line 15 use strict; use warnings; $ARGV[0] or exit; ( my $path = $ARGV[0] ) =~ s!(::|-)!/!g; for ( @INC ) { my $pm = "$_/$path.pm"; ( my $pod = $pm ) =~ s!pm$!pod!; my $file = -f $pm ? $pm : -f $pod ? $pod : undef; if ( $file ) { print $file; last; } } __END__ :endofperl @rem = vim:syn=perl