If_perl

Nvim :help ページは、ここから生成され、ソースには tree-sitter-vimdoc パーサーが使用されています。


Vim の perl インターフェース perl
詳細は provider-perl を参照してください。

1. コマンド perl-commands

:perl
:[range]perl {stmt} perl ステートメント {stmt} を実行します。カレントパッケージは "main" です。:perl コマンドが動作するかの簡単な確認
:perl print "Hello"
:[range]perl << [trim] [{endmarker}] {script} {endmarker} perl スクリプト {script} を実行します。{script} の後の {endmarker} の前には空白文字を入れてはいけません。
[endmarker] を省略した場合、:append:insert コマンドのように、デフォルトではドット '.' になります。
Vim スクリプトに perl コードを含めるのに便利です。perl が必要です。script-here を参照してください。
function! MyVimMethod()
perl << EOF
sub my_vim_method
{
        print "Hello World!\n";
}
EOF
endfunction
perl のバージョンを確認するには
:perl print $^V
:perldo
:[range]perldo {cmd} [range] 内の各行に対して perl コマンド {cmd} を実行します。$_ には各行のテキストが末尾の <EOL> なしで設定されます。$_ に加えて、$line と $linenr にもそれぞれ行の内容と行番号が設定されます。$_ を設定するとテキストが変更されますが、このコマンドを使用して行を追加または削除することはできません。[range] のデフォルトはファイル全体です: "1,$"。
:perldo $_ = reverse($_);
:perldo $_ = "".$linenr." => $line";
perl を使用して範囲をフィルタリングするために、:perldo:perl と組み合わせて使用できます。例えば
:perl << EOF
sub perl_vim_string_replace
{
    my $line = shift;
    my $needle = $vim->eval('@a');
    my $replacement = $vim->eval('@b');
    $line =~ s/$needle/$replacement/g;
    return $line;
}
EOF
:let @a='somevalue'
:let @b='newvalue'
:'<,'>perldo $_ = perl_vim_string_replace($_)
:perlfile
:[range]perlfile {file} {file} 内の perl スクリプトを実行します。引数全体が単一のファイル名として使用されます。
これらのコマンドはどちらも本質的に同じことを行います - 指定された行範囲を "現在の範囲" として設定し、perl コードを実行します。
:perl の場合は、実行するコードはコマンドラインにあります。:perlfile の場合は、実行するコードは指定されたファイルの内容です。
perl コマンドは サンドボックス では使用できません。
引数を渡すには、@ARGV を明示的に設定する必要があります。例
:perl @ARGV = ("foo", "bar");
:perlfile myscript.pl
いくつかの例を以下に示します perl-examples
:perl print "Hello"
:perl $current->line (uc ($current->line))
:perl my $str = $current->buffer->[42]; print "Set \$str to: $str"
("use" ステートメントなどの) 変更は、あるコマンドから次のコマンドに引き継がれることに注意してください。

2. VIM モジュール perl-vim

Perl コードは、"VIM" モジュールを介して Nvim にアクセスします。
概要
print "Hello"                                # displays a message
VIM::Msg("Hello")                        # displays a message
VIM::SetOption("ai")                        # sets a vim option
$nbuf = VIM::Buffers()                        # returns the number of buffers
@buflist = VIM::Buffers()                # returns array of all buffers
$mybuf = (VIM::Buffers('a.c'))[0]        # returns buffer object for 'a.c'
@winlist = VIM::Windows()                # returns array of all windows
$nwin = VIM::Windows()                        # returns the number of windows
($success, $v) = VIM::Eval('&path')        # $v: option 'path', $success: 1
($success, $v) = VIM::Eval('&xyz')        # $v: '' and $success: 0
$v = VIM::Eval('expand("<cfile>")')        # expands <cfile>
$curwin->SetHeight(10)                        # sets the window height
@pos = $curwin->Cursor()                # returns (row, col) array
@pos = (10, 10)
$curwin->Cursor(@pos)                        # sets cursor to @pos
$curwin->Cursor(10,10)                        # sets cursor to row 10 col 10
$mybuf = $curwin->Buffer()                # returns the buffer object for window
$curbuf->Name()                                # returns buffer name
$curbuf->Number()                        # returns buffer number
$curbuf->Count()                        # returns the number of lines
$l = $curbuf->Get(10)                        # returns line 10
@l = $curbuf->Get(1 .. 5)                # returns lines 1 through 5
$curbuf->Delete(10)                        # deletes line 10
$curbuf->Delete(10, 20)                        # delete lines 10 through 20
$curbuf->Append(10, "Line")                # appends a line
$curbuf->Append(10, "L1", "L2", "L3")        # appends 3 lines
@l = ("L1", "L2", "L3")
$curbuf->Append(10, @l)                        # appends L1, L2 and L3
$curbuf->Set(10, "Line")                # replaces line 10
$curbuf->Set(10, "Line1", "Line2")        # replaces lines 10 and 11
$curbuf->Set(10, @l)                        # replaces 3 lines
モジュール関数
perl-Msg
VIM::Msg({msg}) メッセージ {msg} を表示します。
perl-SetOption
VIM::SetOption({arg}) vim オプションを設定します。{arg} は ":set" コマンドが受け入れる任意の引数です。これは、引数にスペースを含めることができないことを意味します! :set を参照してください。
perl-Buffers
VIM::Buffers([{bn}...]) 引数がない場合、配列コンテキストですべてのバッファのリストを返し、スカラーコンテキストでバッファの数を返します。バッファ名または番号のリスト {bn} の場合、Vim の内部関数 bufname() と同じルールを使用して、{bn} に一致するバッファのリストを返します。 警告: :bwipe が使用されると、リストは無効になります。
perl-Windows
VIM::Windows([{wn}...]) 引数がない場合、配列コンテキストですべてのウィンドウのリストを返し、スカラーコンテキストでウィンドウの数を返します。ウィンドウ番号のリスト {wn} の場合、それらの番号を持つウィンドウのリストを返します。 警告: ウィンドウが閉じられると、リストは無効になります。
perl-DoCommand
VIM::DoCommand({cmd}) Ex コマンド {cmd} を実行します。
perl-Eval
VIM::Eval({expr}) {expr} を評価し、リストコンテキストで (成功、値) を返し、スカラーコンテキストで値のみを返します。success=1 は、val に {expr} の値が含まれていることを示します。success=0 は、式の評価に失敗したことを示します。'@x' はレジスタ x の内容を返し、'&x' はオプション x の値を返し、'x' は内部 変数 x の値を返し、'$x' は perl の $ENV{x} と同等です。コマンドラインからアクセスできるすべての 関数{expr} に対して有効です。リスト は、項目を結合して改行を挿入することで文字列に変換されます。
perl-Blob
VIM::Blob({expr}) スカラー値から Blob リテラル文字列 0zXXXX を返します。

3. VIM::Buffer オブジェクト perl-buffer

メソッド
perl-Buffer-Name
Name() バッファのファイル名を返します。
perl-Buffer-Number
Number() バッファの番号を返します。
perl-Buffer-Count
Count() バッファの行数を返します。
perl-Buffer-Get
Get({lnum}, {lnum}, ...) 指定された各 {lnum} について、バッファ内の行 {lnum} のテキスト文字列を返します。{lnum} のリストを含む配列を渡すことができます。
perl-Buffer-Delete
Delete({lnum}, {lnum}) バッファ内の行 {lnum} を削除します。2 番目の {lnum} がある場合は、最初の {lnum} から 2 番目の {lnum} までの行の範囲を削除します。
perl-Buffer-Append
Append({lnum}, {line}, {line}, ...) 各 {line} 文字列をバッファ行 {lnum} の後に追加します。{line} のリストは配列にすることができます。
perl-Buffer-Set
Set({lnum}, {line}, {line}, ...) バッファ行 {lnum} から始まる 1 つ以上のバッファ行を、指定された {lines} に置き換えます。{line} のリストは配列にすることができます。引数が無効な場合、置換は行われません。

4. VIM::Window オブジェクト perl-window

メソッド: perl-Window-SetHeight
SetHeight({height}) ウィンドウの高さを、画面の制限内で {height} に設定します。
perl-Window-GetCursor
Cursor({row}, {col}) 引数がない場合、ウィンドウ内の現在のカーソル位置の (行、列) 配列を返します。{row}{col} 引数を使用すると、ウィンドウのカーソル位置を {row}{col} に設定します。{col} は Perl 流に 0 から始まるため、Vim のルーラーの値より 1 少ないことに注意してください。
Buffer() perl-Window-Buffer
指定されたウィンドウに対応する Buffer オブジェクトを返します。

5. レキシカル変数 perl-globals

複数のレキシカル変数があります。
$curwin 現在の Window オブジェクト。 $curbuf 現在の Buffer オブジェクト。 $vim Neovim::Ext オブジェクト。 $nvim $nvim と同じ。 $current Neovim::Ext::Current オブジェクト。
これらは "main" パッケージからも利用できます
$main::curwin 現在の Window オブジェクト。 $main::curbuf 現在の Buffer オブジェクト。
メイン
コマンドインデックス
クイックリファレンス