星期四, 12月 17, 2009

vim plugin: autocomplpop (acp)

vim 內建的 omni c complete function 其實算是堪用,但不方便的就是每次都要自己按 ^P, ^N 或是 ^X^O 等組合才會跳出來讓你選。這兩天在 Vim taiwan 的 mailing list 看到 acp 這個 plugin,試用了以後愛不釋手,安裝方法跟其他vim plugin 沒兩樣:
到這邊下載最新版的 autocomplpop: http://www.vim.org/scripts/script.php?script_id=1879
然後解壓縮在 ~/.vim 就可以了:
unzip -d ~/.vim vim-autocomplpop.zip
這樣就算是安裝好了,開 vim 也會自動執行。
autocomplpop 簡單的說就是你每輸入一個超過長度的word(預設2個字元) 他就開始用 keyword/omni 找可能的補全單字然後顯示在pmenu,多說無益,試過才知道!

不過剛裝好的時候有點不習慣,因為他預設的搜尋範圍不包括 include 近來的檔案,所以以前慣用的 ^N, ^P (或是 ^X^i) 就只能用 ^X^I 呼叫出來,要讓 acp 也搜尋include 的檔案的話只要在 ~/.vimrc 加入下面的設定:(vim 預設 .,w,b,u,t,i ; acp 預設 .,w,b,k)
let g:acp_completeOption = '.,w,b,u,t,i,k'
每個選項的功用可以參考 :help complete
這樣邊打字就也會邊出現 api 的 auto complete popup,挺實用的!
------------------
另外這個也是在 mailing list 上看到的(其實是包含在acp 的help file裡,只是大家沒注意到):
acp 也提供 snipMate 一個接口,讓 snipMate 的補全也變成 menu 的樣式讓你選,啟動的方法只要在 ~/.vim/plugin/snipMate.vim 加入

  fun! GetSnipsInCurrentScope()
    let snips = {}
    for scope in [bufnr('%')] + split(&ft, '\.') + ['_']
      call extend(snips, get(s:snippets, scope, {}), 'keep')
      call extend(snips, get(s:multi_snips, scope, {}), 'keep')
    endfor
    return snips
  endf
然後在 ~/.vimrc:
let g:acp_behaviorSnipmateLength=1
這樣輸入大寫字母的時候他就會去找 snipMate 的 template 看有沒有符合的項目並整理到menu 顯示,有興趣的人可以試看看。

沒有留言: