首先需要再編譯vim的時候enable perl;
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: option 'path', $success: 1 :perl ($success, $v) = VIM::Eval('&xyz') # $v: '' and $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()|使用同樣的規則。 *perl-Windows*VIM::Windows([{wn}...]) 沒有參數的時候,在列表上下文裡面返回所有視窗的列表或者在 標量上下文時返回視窗的個數。對於一個視窗名字數量列表{wn}, 返回匹配{wn}的視窗列表。 *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"必須在行首(前面不能有前置空格)。
以上摘自http://man.chinaunix.net/newsoft/vi/doc/if_perl.html
有空想想如何使用幹這些api寫一個自己vim外掛程式