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
