使用perl介面書寫vim外掛程式

來源:互聯網
上載者:User

首先需要再編譯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外掛程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.