日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁編程開發(fā)其它知識 → vim編輯器插件開發(fā)實例和講解

      vim編輯器插件開發(fā)實例和講解

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:布同時間:2012/11/4 22:21:03字體大。A-A+

      作者:布同點擊:0次評論:0次標(biāo)簽: vim

      • 類型:電子資料大小:83.2M語言:中文 評分:5.0
      • 標(biāo)簽:
      立即下載

      vim是一個強大的編輯器,以命令行操作的快速性著稱。不過,玩著玩著,感覺也不能解決自己工作中的一些特別的問題。所以現(xiàn)在你可以有三種方法來自定義一些命令,完成自己個性化的需求。下面就來一一嘗試。

      Vim文本編輯器
      3.3
      類別: 文本編輯    大。9.2M    語言: 英文
      查看詳細(xì)信息 >>

      【宏命令】

        可以用宏命令來批量處理。不過退出之后就消失了,下次不能再使用,所以這個不是一個永久性的方法。短時解決重復(fù)工作是非常高效的。

      【自定義命令】

        可以自定義命令,這個也是簡短操作的一個好方法。例如:在gvim下將當(dāng)前文本去掉重復(fù)行,就可以使用以下兩個命令:

      1 :sort
      2:g/^\(.\+\)$\n\1/d 
       如果每次都敲入這兩行命令,估計你也嫌麻煩。可以自定義為一個命令,這樣就可以直接用簡短方式執(zhí)行了。

      1 :command! Td :sort|:g/^\(.\+\)$\n\1/d

        將上面這一個作為一個獨立行放入vim的配置文件中。window下是Vim\_vimrc,linux下是~/.vimrc文件。這樣啟動vim的時候就會自動定義好這個命令,直接就可以使用了。

        關(guān)于command自定義冒號命令,我這里羅嗦幾句講一下。

      1.以:command開頭,如果是重新定義,command后加!號。沒有定義過也可以加上。如果需要指定可能的參數(shù)個數(shù),可以加上-xargs=n配置項。

      2.空格之后緊跟新的命令名字,請以大寫字母開頭,后面的是否采用駝峰命名法取決于你自己。

      3.然后就是命令操作的集合了。用|分割多個命令,這里跟平常|在編程中的語義不同,請注意。

        對于這樣短一點的命令可以采用這種方式去做,如果操作太多,那么需要在command后面加入很多代碼,這不是vim想看到的?梢詫⒍嘤嗟拇a放入函數(shù)中,這是今天我想說的主題。

      【插件開發(fā)】

      插件文件放在\ftplugin類似的目錄中,以.vim為后綴。例如:

      // art.vim
      if exists("b:did_ftplugin")
      finish
      endif

      run ftplugin/lisp.vim

      setl lw-=if
      setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,
      \for,schema,while 

      其中一開始判斷是否已經(jīng)加載了文件,防止重復(fù)加載。然后調(diào)用了lisp.vim文件,最后進行了一些操作,還可以繼續(xù)定義自己的函數(shù)。這就是插件的常見基本結(jié)構(gòu)了。

      【開發(fā)實例】

      首先,加入頭部,防止重復(fù)加載。

      1if &cp || exists("g:loaded_filter")
      2finish
      3endif
      4let g:loaded_filter = "v1"

         這里你還可以自己修改一下loaded_filter,改為其他變量,這樣就能夠區(qū)分你自己的插件了。

      然后是定義函數(shù):

      func Del(part)
      let s:num = line('$')
      while(s:num)
      let s:str = getline(s:num)
      let s:num -= 1
      let s:str = substitute(s:str, a:part, '', '')
      call setline(s:num + 1, s:str)
      unlet s:str
      endwhile
      unlet s:num
      return
      endfunc

         函數(shù)都是func開頭,名字大寫字母開頭,可以傳遞參數(shù)。我簡單說一下這個函數(shù)的功能:

        首先獲取全文行數(shù),放到num變量中。然后調(diào)用getline函數(shù),取出0至num-1行的內(nèi)容,將part部分替換為空字符串,也就是刪除。然后調(diào)用setline函數(shù),更新該行的內(nèi)容為替換之后的內(nèi)容。這個函數(shù)很簡單,作用就是從全文中刪掉一個字符串。要在vim中執(zhí)行這個函數(shù)只需要輸入:

      :call Del('j')

        回車之后就會執(zhí)行。如果提示沒有找到Del函數(shù),可以在配置文件中加入對自定義文件的引用:

      source $VIMRUNTIME/ftplugin/filter.vim

         然后重啟vim,再次執(zhí)行就可以了。

        如果我們想自定義刪除兩個符號之間的內(nèi)容,那么可以將上面函數(shù)substitute中的第二個參數(shù)修改為正則表達(dá)式,進行匹配和替換就行了。

        這里我要講另外一個實例:

      func Uc(flag)

          let s:pre = a:flag[0]

          let s:end = a:flag[1]

          let s:num = line('$')

          let s:count = {}

          while(s:num)

              let s:str = getline(s:num)

              let s:num -= 1

              let s:first = stridx(s:str, s:pre)

              if( s:first == -1)

                  continue

              endif

              let s:first += 1

              let s:second = stridx(s:str, s:end)

              if( s:second == -1)

                  continue

              endif

              let s:str = strpart(s:str, s:first, s:second - s:first)

              if( has_key(s:count, s:str) )

                  let s:count[s:str] += 1

              else

                  let s:count[s:str] = 1

              endif

              unlet s:str

          endwhile

          for key in keys(s:count)

              echo 'key=' key ',value=' s:count[key]

          endfor

          unlet s:pre

          unlet s:end

          unlet s:num

          unlet s:count

          return

      endfunc

         這個函數(shù)的作用是根據(jù)參數(shù)字符串part的第一個字符和第二個字符去搜索全文每行,按照匹配到的這兩個字符之間的內(nèi)容進行統(tǒng)計,計算出重復(fù)量,顯示到命令輸入欄的上方。這個功能也可以通過linux下的awk來實現(xiàn),不過經(jīng)過這樣自己定義之后的函數(shù)可以直接調(diào)用,一次開發(fā),多次使用,效率更高。

      【總結(jié)】

        我想講述的就是這些了,如果你還有更多興趣想學(xué)習(xí)更多,可以參考vim用戶手冊,是一個pdf的電子書,不用緊張,有很好的中文翻譯版本,其中詳細(xì)列舉了vim插件開發(fā)的語法。

        你還可以通過:function命令查看現(xiàn)在已經(jīng)定義的函數(shù),然后:function Del查看Del函數(shù)的定義內(nèi)容,這樣來學(xué)習(xí)更多的插件編程技巧。

        你還可以通過:help substitute來查看substitute函數(shù)的相關(guān)文檔,這個文檔一般是英文的。計算機英文只要你堅持看,你會發(fā)現(xiàn)他們的措辭很類似,單詞也就是那幾個,比較好掌握。

        你還可以去插件目錄下去閱讀其他插件的源代碼,其中不懂的函數(shù)就help一下,然后練習(xí)練習(xí)就會了,更多插件完全就難不倒你了。

        所以現(xiàn)在你就可以去動手開始做自己的插件了,祝你成功。

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
        推薦文章

        沒有數(shù)據(jù)