Up: 目次   [Index]


Perl インターフェイス

*if_perl.txt*   For Vim バージョン 8.1.  Last change: 2019 Jul 21


                  VIMリファレンスマニュアル    by Sven Verdoolaege
                                              and Matt Gerassimof

Perl と Vim

1. Perl のファイルを編輯する|perl-editing|
2. Perl インターフェイス付きのコンパイル|perl-compiling|
3. Perl インターフェイスを使ふ|perl-using|
4. 動的ローディング|perl-dynamic|

{Vim が |+perl| 機能付きでコンパイルされてゐる場合にのみ利用できます}

1. Perl のファイルを編輯する

Vim の構文ハイライト (syntax highlighting) は Perl と POD のファイルもサポートしてゐます。Vim はファイルの擴張子が .pl か .pm であると、Perl のコードだと想定します。また、ファイルの擴張子によらず、Vim はファイルの1行目を調べてファイルが Perl スクリプトであるかどうか確認します (Vim の syntax ディレクトリにある scripts.vim を參照してください)。ファイルの擴張子が .POD であると、Vim は PODテキストであると想定します。

Perl でタグを使ふには、最近のctagsが必要です。ここを訪れてください:

http://ctags.sourceforge.net

Perl スクリプトの "pltags.pl" を使ふこともできます。これは $VIMRUNTIME/tools ディレクトリにあります。これは今のところ最新の ctags よりも高機能です。

2. Perl インターフェイス付きのコンパイル

Perl インターフェイス付きで Vim をコンパイルするには、5.004 もしくはそれ以上のバージョンの Perl が必要です。Perl は Vim をコンパイルする前にインストールしておかなければなりません。Vim の Perl インターフェイスは、公式にリリースされたバージョンである Perl 5.003 では動作しません!Perl 5.003_05 もしくはそれ以上であれば、たぶん動作するでせう。

Vim への Perl パッチは、次の方によつて作成されました:

Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
Matt Gerassimof

Perl for MS-Windows (と他のプラットフォーム) は、次の場所で見つけることができます:

http://www.perl.org/

ActiveState のものも動作するでせうし、Strawberry Perl は良い選擇肢です。

3. Perl インターフェイスを使ふ

:pe[rl] {cmd}

Perl コマンド {cmd} を實行します。現在のパッケージは "main" です。‘:perl‘ が動作するかを確認する單純な例は:

:perl VIM::Msg("Hello")
:pe[rl] << [endmarker]
{script}
{endmarker}

Perlスクリプト {script} を實行します。

{script} の後の {endmarker} の前に空白を置いてはいけません。

[endmarker] を省略した時は |:append| や |:insert| のやうに ’.’ が使はれます。これは函數の中で使ふ時に便利です。なぜなら "$i;" は |:insert| コマンドの開始と紛らはしいからです。

|:perl| コマンドのこの方法は Vim script の中に Perl スクリプトを埋め込む時に便利です。

Note:
Perl のサポートを有效にしてコンパイルされてゐないとこのコマンドは機能しません。エラーを囘避するには |script-here| を參照してください。

Vim script の例:

function! WhitePearl()
perl << EOF
        VIM::Msg("pearls are nice for necklaces");
        VIM::Msg("rubys for rings");
        VIM::Msg("pythons for bags");
        VIM::Msg("tcls????");
EOF
endfunction

使つてゐる Perl のバージョンを見るには:

:perl print $^V
:[range]perld[o] {cmd}

Perl コマンド {cmd} を {range} のそれぞれの行に對して實行します。$_ はテキスト中のそれぞれの行のテキストに、餘計な <EOL> なしでセットされます。$_ をセットすることでテキストを變更しますが、このコマンドを使つて行を插入したり、削除したりすることはできないといふことに注意してください。

デフォルトの [range] はすべての行です: "1,$"。

いくつかの例をあげますと:

:perl $a=1
:perldo $_ = reverse($_);1
:perl VIM::Msg("hello")
:perl $line = $curbuf->Get(42)

|sandbox| の中の Perl コマンドの實行は制限されてゐます。":perldo" は常に使へません。":perl" は安全な環境の中で、可能なら評價されます。

Perl で使へる函數の一覽です:

:perl VIM::Msg("Text")メッセージを表示します
:perl VIM::Msg("Error", "ErrorMsg")エラーメッセージを表示します
:perl VIM::Msg("remark", "Comment")ハイライトされたメッセージを表示します
:perl VIM::SetOption("ai")Vim のオプションをセットします
:perl $nbuf = VIM::Buffers()全てのバッファ數を返す
:perl @buflist = VIM::Buffers()全てのバッファの排列を返す
:perl $mybuf = (VIM::Buffers(’qq.c’))[0]’qq.c’ のバッファオブジェクト # を返す
:perl @winlist = VIM::Windows()全てのウィンドウの排列を返す
:perl $nwin = VIM::Windows()ウィンドウ數を返す
:perl ($success, $v) = VIM::Eval(’&path’)$v: ’path’ オプション、$success: 1
:perl ($success, $v) = VIM::Eval(’&xyz’)$v: ” $sucess: 0
:perl $v = VIM::Eval(’expand("<cfile>")’)<cfile> を展開
:perl $curwin->SetHeight(10)ウィンドウの高さを設定します
:perl @pos = $curwin->Cursor()(行, 列) 排列を返します
:perl @pos = (10, 10)
:perl $curwin->Cursor(@pos)カーソルを @pos にセットします
:perl $curwin->Cursor(10,10)カーソルを 10 行 10 列目にセットします
:perl $mybuf = $curwin->Buffer()ウィンドウのバッファオブジェクトを返す
:perl $curbuf->Name()バッファ名を返します
:perl $curbuf->Number()バッファ番號を返します
:perl $curbuf->Count()行數を返します
:perl $l = $curbuf->Get(10)10 行目を返します
:perl @l = $curbuf->Get(1 .. 5)1 行目から5行目までを返します
:perl $curbuf->Delete(10)10 行目を削除します
:perl $curbuf->Delete(10, 20)10 行目から 20 行目までを削除します
:perl $curbuf->Append(10, "Line")行を插入します
:perl $curbuf->Append(10, "Line1", "Line2", "Line3")3 行插入します
:perl @l = ("L1", "L2", "L3")
:perl $curbuf->Append(10, @l)L1, L2, L3 を插入します
:perl $curbuf->Set(10, "Line")10 行目を置き換へます
:perl $curbuf->Set(10, "Line1", "Line2")10 行目と 11 行目を置き換へます
:perl $curbuf->Set(10, @l)3 行置き換へます
VIM::Msg({msg}, {group}?)

{msg} メッセージを表示する。オプショナルな {group} 引數は、そのメッセージの Vim でのハイライトグループを指定します。

VIM::SetOption({arg})

Vim のオプションをセットします。{arg} は ":set" コマンドで使へる引數であればなんでもよいです。このことは、引數の中にスペースを入れることは許されないといふことを意味しますので、注意してください。參照: |:set|

VIM::Buffers([{bn}...])

引數なしだと、排列コンテキストではすべてのバッファのリストを、スカラーコンテキストではバッファの數を返します。バッファ名 {bn} もしくは、バッファ番號 {bn} のリストが與へられた場合は、{bn} にマッチするバッファのリストを返します。ここでは Vim の內部函數 |bufname()| と同じルールが用ゐられます。

警告:
|:bwipe| が使はれると、このリストは無效になります。それを使はうとすると Vim がクラッシュすることがあります。

VIM::Windows([{wn}...])

引數なしだと、排列コンテキストではすべてのウィンドウのリストを返し、スカラーコンテキストではウィンドウの數を返します。ウィンドウ數 {wn} にリストが與へられた場合は、それらの番號のウィンドウのリストを返します。

警告:
|:bwipe| が使はれると、このリストは無效になります。それを使はうとすると Vim がクラッシュすることがあります。

VIM::DoCommand({cmd})

Ex コマンド {cmd} を實行します。

VIM::Eval({expr})

{expr} を評價して、リストコンテキストでは (success, value) を返し、スカラーコンテキストでは單に値を返します。

success=1 だと、val は {expr} の値を含みます。

success=0 だと、式の評價に失敗したことを示してゐます。

’@x’ はレジスタ x の內容を返し、’&x’ はオプション x の値を返します。’x’ は內部變數 |variables| x を返し、’$x’ は Perl の $ENV{x} と同じです。コマンドラインからアクセスできるすべての |functions| は {expr} に使ふことができます。

リスト |List| は文字列に變換されます。そのとき各要素の閒に改行が插入され、連結されます。

VIM::Blob({expr})

スカラー値から |Blob| リテラル文字列 0zXXXX を返します。

Window->SetHeight({height})

ウィンドウの高さをスクリーンの上限以內で {height} にセットします。

Window->Cursor({row}?, {col}?)

引數なしだと、ウィンドウの現在のカーソル位置の (row, col) 排列を返します。{row} と {col} 引數をつけてよばれると、ウィンドウのカーソル位置を {row} と {col}にセットします。{col} は Perl のやうに0から數へられますので、Vim のルーラーの値より 1 つ小さくなるといふことに注意してください。

Window->Buffer()

與へられたウィンドウに對應するバッファオブジェクトを返します。

Buffer->Name()

バッファのファイル名を返します。

Buffer->Number()

バッファの番號を返します。

Buffer->Count()

バッファの行數を返します。

Buffer->Get({lnum}, {lnum}?, ...)

バッファの {lnum} 行目のテキストを、指定されてゐるそれぞれの {lnum} に關して返します。{lnum} のリストとして排列を渡すこともできます。

Buffer->Delete({lnum}, {lnum}?)

バッファの {lnum} 行目を削除します。2 つ目の {lnum} が指定されてゐると、始めの {lnum} から 2 つ目の {lnum} までの範圍の行が削除されます。

Buffer->Append({lnum}, {line}, {line}?, ...)

それぞれの {line} をバッファの {lnum} 行目の後に插入します。{line} のリストは排列でもよいです。

Buffer->Set({lnum}, {line}, {line}?, ...)

バッファの行を 1 行以上 {line} で指定される行で置き換へます。置き換へは、{lnum} から始まり、{line} は排列でもよいです。引數が有效でないものであれば、置き換へは起こりません。

$main::curwin

現在のウィンドウオブジェクト

$main::curbuf

現在のバッファオブジェクト

Vim script にその他のスクリプトを埋め込むときに、その言語がサポートされてゐないなら、その部分をスキップしたいでせう。しかし、次のコードはうまく動きません。

if has('perl')
  perl << EOF
    this will NOT work!
EOF
endif

このやうにしないで、函數の中に Perl/Python/Ruby/etc のコードを書き、その函數を呼ぶようにしてください。

if has('perl')
  function DefPerl()
  perl << EOF
    this works
EOF
  endfunction
  call DefPerl()
endif

Note:
"EOF" は行頭になければなりません。

4. 動的ローディング

MS-Windows と Unix では Perl ライブラリを動的に讀み込むことが可能です。これを行ふと |:version| の出力に |+perl/dyn| が含まれるやうになります。

この場合、Vim は必要になつたときだけ Perl の DLL や共有ライブラリのファイルを檢索します。Perl インターフェイスを使はないときは DLL を必要としないので、DLL なしで Vim を使ふことができます。

MS-Windows

http://www.perl.org から Perl をダウンロードできます。Vim のビルドには ActiveState のものが使はれました。

Perl インターフェイスを使ふには Perl の DLL が檢索パス內に存在しなければなりません。perl512.dll が見つからないといふやうなメッセージが表示された場合は、$PATH に適切なディレクトリが含まれてゐるかどうか確認してください。通常は Perl のインストーラによつて設定されるでせう。コンソールウィンドウで "path" とタイプすると、どのディレクトリが檢索パスになつてゐるか確認できます。また ’perldll’ オプションを Perl の DLL を指定するのに使ふこともできます。

DLL の名前はVimをコンパイルした時の Perl のバージョンに一致しなければなりません。現在その名前は "perl512.dll" です。これは Perl5.12 用です。これを確かめるには、"gvim.exe" を開き、"perl\d*.dll\c" を檢索してください。

Unix

コンパイル時に DYNAMIC_PERL_DLL で指定されたファイルの代はりに ’perldll’ オプションで使用する Perl の共有ライブラリのファイルを指定するのに使へます。共有ライブラリのバージョンは Vim と共にコンパイルされた Perl のバージョンと一致してゐなければなりません。


Up: 目次   [Index]