*if_perl.txt*	For Vim バージョン 9.1.  Last change: 2025 Nov 09


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


Perl と Vim				*perl* *Perl*

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

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

==============================================================================
1. Perl のファイルを編集する				*perl-editing*

Vim の構文ハイライト(syntax highlighting)は Perl と POD のファイルもサポートし
ている。Vim はファイルの拡張子が .pl か .pm であると、Perl のコードだと想定
する。Vimは、ファイルタイプが検出されなかった場合、ファイルの shebang 行も調べ
て、ファイルが Perl スクリプトかどうかを確認する。ファイル名に .POD サフィック
スが付いている場合、Vim はファイルが POD テキストであると想定する。

Perl でタグを使うには、Universal/Exuberant Ctags が必要です。ここを訪れてくだ
さい:
	Universal Ctags (推奨): https://ctags.io
	Exuberant Ctags: http://ctags.sourceforge.net

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

==============================================================================
2. Perl インターフェイス付きのコンパイル		*perl-compiling*

Perl インターフェイス付きで Vim をコンパイルするには、最新バージョンの Perl が
必要である。Vim をコンパイルする前に、Perl がインストールされている必要がある。

Vim への Perl パッチは、次の方によって作成されました:
	Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
	Matt Gerassimof

MS-Windows用(および他のプラットフォームの) Perl は、次の場所で見つけることがで
きます:
	http://www.perl.org/
ActiveState のものも動作するはずですが、Strawberry Perlは良い選択肢です。

==============================================================================
3. Perl インターフェイスを使う				*perl-using*

							*:perl* *:pe*
:pe[rl] {cmd}		Perl コマンド {cmd} を実行します。現在のパッケージは
			"main" です。`:perl` が動作するかを確認する単純な例は: >
				:perl VIM::Msg("Hello")

:pe[rl] << [trim] [{endmarker}]
{script}
{endmarker}
			Perlスクリプト {script} を実行します。
			{script} の後ろの {endmarker} の前に空白を置いてはいけ
			ません。

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

			この方法は 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
<

							*:perldo* *:perld*

:[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)
<							*E299*
|sandbox|の中のPerlコマンドの実行は制限されています。":perldo" は常に使えませ
ん。":perl" は安全な環境の中で、可能なら評価されます。

							*perl-overview*
Perl で使える関数の一覧です: >

   :perl VIM::Msg("Text")		# メッセージを表示します
   :perl VIM::Msg("Wrong!", "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()		# returns buffer 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行置き換えます
<
							*perl-Msg*
VIM::Msg({msg}, {group}?)
			{msg} メッセージを表示する。オプショナルな {group} 引
			数は、そのメッセージの Vim でのハイライトグループを指
			定します。

							*perl-SetOption*
VIM::SetOption({arg})	Vim のオプションをセットします。{arg} は ":set" コマン
			ドで使える引数であればなんでもよいです。このことは、引
			数の中にスペースを入れることは許されないということを意
			味しますので、注意してください。参照: |:set|

							*perl-Buffers*
VIM::Buffers([{bn}...])	引数なしだと、配列コンテキストではすべてのバッファのリ
			ストを、スカラーコンテキストではバッファの数を返しま
			す。バッファ名 {bn} もしくは、バッファ番号 {bn} のリス
			トが与えられた場合は、{bn} にマッチするバッファのリス
			トを返します。ここでは Vim の内部関数 |bufname()| と同
			じルールが用いられます。
			警告: |:bwipe| が使われると、このリストは無効になりま
			す。それを使おうとすると Vim がクラッシュすることがあ
			ります。

							*perl-Windows*
VIM::Windows([{wn}...])	引数なしだと、配列コンテキストではすべてのウィンドウの
			リストを返し、スカラーコンテキストではウィンドウの数を
			返します。ウィンドウ数 {wn} にリストが与えられた場合は、
			それらの番号のウィンドウのリストを返します。
			警告: |:bwipe| が使われると、このリストは無効になりま
			す。それを使おうとすると Vim がクラッシュすることがあ
			ります。

							*perl-DoCommand*
VIM::DoCommand({cmd})	Ex コマンド {cmd} を実行します。

							*perl-Eval*
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| は文字列に変換されます。そ
			のとき各要素の間に改行が挿入され、連結されます。

							*perl-Blob*
VIM::Blob({expr})	スカラー値から |Blob| リテラル文字列 0zXXXX を返します。

							*perl-SetHeight*
Window->SetHeight({height})
			ウィンドウの高さをスクリーンの上限以内で {height} に
			セットします。

							*perl-GetCursor*
Window->Cursor({row}?, {col}?)
			引数なしだと、ウィンドウの現在のカーソル位置の
			(row, col) 配列を返します。{row} と {col} 引数をつけて
			よばれると、ウィンドウのカーソル位置を {row} と {col}
			にセットします。{col} は Perl のように0から数えられま
			すので、Vim のルーラーの値より1つ小さくなるということ
			に注意してください。

Window->Buffer()					*perl-Buffer*
			与えられたウィンドウに対応するバッファオブジェクトを返
			します。

							*perl-Name*
Buffer->Name()		バッファのファイル名を返します。

							*perl-Number*
Buffer->Number()	バッファの番号を返します。

							*perl-Count*
Buffer->Count()		バッファの行数を返します。

							*perl-Get*
Buffer->Get({lnum}, {lnum}?, ...)
			バッファの {lnum} 行目のテキストを、指定されているそれ
			ぞれの {lnum} に関して返します。{lnum} のリストとして
			配列を渡すこともできます。

							*perl-Delete*
Buffer->Delete({lnum}, {lnum}?)
			バッファの {lnum} 行目を削除します。二つ目の {lnum} が
			指定されていると、始めの {lnum} から二つ目の {lnum} ま
			での範囲の行が削除されます。

							*perl-Append*
Buffer->Append({lnum}, {line}, {line}?, ...)
			それぞれの {line} をバッファの {lnum} 行目の後に挿入し
			ます。{line} のリストは配列でもよいです。

							*perl-Set*
Buffer->Set({lnum}, {line}, {line}?, ...)
			バッファの行を1行以上 {line} で指定される行で置き換え
			ます。置き換えは、{lnum} から始まり、{line} は配列でも
			よいです。引数が有効でないものであれば、置き換えは起こ
			りません。

$main::curwin
			現在のウィンドウオブジェクト

$main::curbuf
			現在のバッファオブジェクト


							*script-here*
Vim script にその他のスクリプトを埋め込むときに、その言語がサポートされていな
い場合、その部分をスキップしたいでしょう。 >
   if has('perl')
     perl << EOF
       print 'perl works'
   EOF
   endif
Note: "EOF" は前に空白を入れずに行頭に置く必要があります。

==============================================================================
4. 動的ローディング					*perl-dynamic*

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 のバージョンと一致して
いなければなりません。

Note: Perl をローカルでビルドする場合、Vim が正常にリンクするためには、スレッ
ドサポート付きでコンパイルされたバージョンを使用する必要があります。Perl を構
成するときに `-Dusethreads` フラグを使うことができ、Perl のバイナリでこのフラ
グが有効になっているかどうかは `perl -V` を実行して "Compile-time options" の
下に `USE_ITHREADS` があるかどうかで確認することができます。

==============================================================================
 vim:tw=78:ts=8:noet:ft=help:norl:
