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";
可以将 :perldo:perl 结合使用,以使用 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} 的列表,返回一个包含匹配 {bn} 的缓冲区的列表,使用与 Vim 的内部 bufname() 函数相同的规则。 警告: 当使用 :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} 都是有效的。一个 List 通过连接项目并插入换行符来转换为字符串。
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} 行。如果有第二个 {lnum},则删除从第一个 {lnum} 到第二个 {lnum} 的行范围。
perl-Buffer-Append
Append({lnum}, {line}, {line}, ...) 在缓冲区第 {lnum} 行之后追加每个 {line} 字符串。{line} 列表可以是数组。
perl-Buffer-Set
Set({lnum}, {line}, {line}, ...) 用指定的 {lines} 替换一个或多个缓冲区行,从缓冲区第 {lnum} 行开始。{line} 列表可以是数组。如果参数无效,则不会执行替换。

4. VIM::Window 对象 perl-window

方法: perl-Window-SetHeight
SetHeight({height}) 将窗口高度设置为 {height},在屏幕限制内。
perl-Window-GetCursor
Cursor({row}, {col}) 在没有参数的情况下,返回窗口中当前光标位置的 (行,列) 数组。如果有 {row}{col} 参数,则将窗口的光标位置设置为 {row}{col}。请注意,{col} 从 0 开始编号(Perl 风格),因此比 Vim 标尺中的值小 1。
Buffer() perl-Window-Buffer
返回对应于给定窗口的缓冲区对象。

5. 词法变量 perl-globals

存在多个词法变量。
$curwin 当前窗口对象。$curbuf 当前缓冲区对象。$vim Neovim::Ext 对象。$nvim 与 $nvim 相同。$current Neovim::Ext::Current 对象。
这些也可以通过“main”包获得
$main::curwin 当前窗口对象。$main::curbuf 当前缓冲区对象。
Main
命令索引
快速参考