*if_perl.txt* For Vim version 6.4. 最近更新: 2006年2月 VIM REFERENCE MANUAL by Sven Verdoolaege and Matt Gerassimof译者
: foolstone@ustc.edu, Willis http://vimcdoc.sf.net Perl 与 Vim *perl* *Perl* 1. 编辑 Perl 文档 |perl-editing| 2. 编译带 Perl 接口的 VIM |perl-comiling
| 3. Perl 接口的使用 |perl-using| 4. 动态调入 |perl-dynamic|{Vi 没有上述这些功能}
Perl 接口只有在编译 Vim 时加入 |+perl| 才能使用。
1. 编辑 Perl 文件 *perl-editing*
Vim 语法高亮显示支持 Perl和POD文件。Vim假设后缀为.pl和.pm的文件是Perl文件。Vim 同时不管文件后缀而测试文件的首行来检查一个文件是否为Perl脚本(参见Vim的语法目录 下的scripts.vim)。Vim假设带后缀.POD的文件是POD文本。 要使用Perl标签,你需要Exuberant ctags的最新版本。在这里可以找到它: http://ctags.sourceforge.net 当然,作为选择你还可以用一个叫pltags.pl的Perl脚本,它是和Vim一起发行的,他的藏 身之处位于$VIMRUNTIME/tools目录。现在这个脚本比Exuberant ctags的Perl支持具备更 多的功能。
2. 编译带Perl接口的VIM *perl-compiling*
为了能编译带Perl接口的Vim,你需要Perl5.004(或者更新)的版本。Perl必须在你编译Vim 前安装。Vim的Perl接口不能和官方发行的Perl5.003一起正常工作!它也许能和Perl5.003 _05或者更新版本一起正常工作。_[译者注
]到翻译的时候,这个问题已经不会是大问题了_ Vim的Perl补丁由Sven Verdoolaege<skimo@breughel.ufsia.ac.be>
和Matt Gerassimof制 作。 Perl的 MS-Windows 版本可以在下面这个网址找到: http://www.perl.com/CPAN/ports/nt/Standard/x86/
3. Perl接口的使用 *perl-using*
*:perl* *:pe* :pe[rl]{cmd}
执行Perl命令{cmd}
。当前包是"main"。 :pe[rl] <<{endpattern}
{script}
{endpattern}
执行Perl脚本{script}
。{endpattern}
不能有任何前导空格。如果忽略了{endpattern}
, 就会像|:append|和|:insert|命令那样默认到达一个点'.'。 |:perl|命令的这种形式主要是用来在vim脚本里面包含perl代 码。备注
:当Perl没有被编译进vim时这条命令不能工作。为了避 免出错请参考|script-here|。 vim脚本示例:
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
*:perldo* *:perld* :[range]
perld[o]{cmd}
对[range]
中的每行执行Perl命令{cmd}
,同时$_依次被赋值 为每行的文本,但不包括行尾的<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("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: '' 而 $success: 0
:perl $v = VIM::Eval('expand("
<cfile>
")') # 展开文件<cfile>
:perl $curwin->SetHeight(10) # 设定窗口高度
:perl @pos = $curwin->Cursor() # 返回坐标(row, col)
: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") # 在第10行后面添加一行
:perl $curbuf->Append(10, "Line1", "Line2", "Line3") # 在第10行后面添加三行
: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) # 分别用L1,L2和L3替换10-12行
*perl-Msg* VIM::Msg({msg}
,{group}
?) 显示消息{msg}
。可选{group}
参数指定用来显示这个消息的 突出方式。 *perl-SetOption* VIM::SetOption({arg}
) 设置一个vim选项。{arg}
可以是任何":set"命令能接受的参数。 这就意味着参数里面不允许有空格!见|:set|。 *perl-Buffers* VIM::Buffers([{bn}
...]) 没有参数的时候,在列表上下文里面返回所有缓冲区的列表 或者在标量上下文时返回缓冲区的个数。对于一个缓冲区名字 列表或者数量{bn}
,返回匹配{bn}
的缓冲区列表,与Vim内部函 数|bufname()|使用同样的规则。 警告: 使用 |:bwipe| 后,该列表就不合法了。如果要强行使 用会使 Vim 崩溃。 *perl-Windows* VIM::Windows([{wn}
...]) 没有参数的时候,在列表上下文里面返回所有窗口的列表或者在 标量上下文时返回窗口的个数。对于一个窗口名字数量列表{wn}
, 返回匹配{wn}
的窗口列表。 警告: 窗口关闭后,该列表就不合法了。如果要强行使用会使 Vim 崩溃。 *perl-DoCommand* VIM::DoCommand({cmd}
) 执行 Ex 命令{cmd}
. *perl-Eval* VIM::Eval({expr}
) 对{expr}
求值并返回(success,val)。success=1表示val包含{expr}
的值。success=0表示表达式求值失败。'@x'返回寄存器x的内容, '&x'返回选项x的值,'x'返回内部变量x的值,'$x'等价于perl中的 $ENV{x}
。所有在命令行可以访问的函数都对{expr}
有效。 *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}
?, ...) 替代缓冲区从第{lnum}
行开始,由{lines}
指定的一行或者多行。{line}
列表可以是一个数组。如果参数无效,就不作替代。 $main::curwin 当前窗口对象。 $main::curbuf 当前缓冲区对象。 *script-here* 当使用嵌入式脚本语言是,你可能想在语言不支持时跳过这些。但是这个机制不能工作:if has('perl')
perl << EOF
this will NOT work!
EOF
endif
取而代之,把Perl/Python/Ruby/等的命令放在一个函数里面并调用它:if has('perl')
function DefPerl()
perl << EOF
this works
EOF
endfunction
call DefPerl()
endif
备注
: "EOF"必须在行首(前面不能有前导空格)。
4. 动态调入 *perl-dynamic*
MS-Windows 上,可以动态调入 Perl 库。|:version| 输出这时应包括 |+perl/dyn|。 这意味着 Vim 只有在必要时才寻找 Perl DLL 文件。如果不使用 Perl 接口,你就不需 要它。这样,即使没有该 DLL 文件,你也可使用 Vim。 要使用 Perl 接口,Perl DLL 必须在搜索路径上。控制台窗口里输入 "path" 可以看到 (搜索路径) 当前使用的目录。 DLL 的名字必须匹配 Vim 编译时所使用的 Perl 版本。目前,该名字为 "perl58.dll", 也就是 Perl 5.8。要确信这一点,编辑 "gvim.exe" 文件并查找 "perl\d*.dll\c"。
vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on 2006年 07月 02日 星期日 22:43:25 UTC