Re: [vim ] NeoComplCache

看板Editor (編輯器(vim/emacs))作者 (Tim Wu)時間14年前 (2010/05/30 17:21), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《dryman (dryman)》之銘言: : 轉貼自 http://sinolog.it/?p=1399 幫你轉正體重貼, 請多愛用chrome extension 同文堂, single click就可以轉. ---------------------------------------------------------------------- Vim的終極自動補全插件:NeoComplCacheVim的終極自動補全插件:NeoComplCache 2010年02月27日 星期六 , 1,798 次點擊 關於自動補全,最初用的是SuperTab,那個時候Vim的自動補全插件寥寥無幾,也就 SuperTab比較有名。不過實際使用過程中這個插件給我的體驗不是很好,原因是補全的準 確度不高。 後來出了一個新插件,AutoComplPop,功能和使用都很簡單。但是很快我就又用回 SuperTab,原因是AutoComplPop在輸入的同時實時地查詢匹配的關鍵詞,導致輸入極不流 暢,效率很低。 一直就這麼湊合著用著SuperTab,隨著這個插件版本的更新,舊功能不斷地完善,新功能 也接二連三地引入,SuperTab在匹配關鍵詞的準確度上有了一些改善,但是新的問題又出 現了。SuperTab後來加入一個新功能,對於程序源文件,可以在其引入的文件以及API文 件中匹配關鍵詞。比如假設我當前正在編輯a.php,在a.php中有include 『b.php';這樣 的語句,當我輸入array並按下Tab鍵時,SuperTab不但會在當前文件中查詢所有匹配項, 還會到b.php中查詢,如果配置過vim、指定一個包含了php的API的文件,則SuperTab還會 自動從這個文件中查詢匹配項。按理說這個功能的理念很好,但問題就在於SuperTab做的 是實時查詢,如果源文件中包含的文件較多,各個文件又較大,問題就顯而易見了。我不 得不在寫程序時小心地使用Tab鍵,否則有時就會出現按一下Tab鍵然後等著Vim在那狂搜 的情況。 前兩天發現了NeoComplCache,光看名字就讓我有點兒興奮,一般使用緩存的速度都很快 。這個插件會在Vim打開文件的時候對上下文作一個索引,並把索引結果保存到緩存中。 同時,文件更改的內容會在保存的時候被索引。此外,NeoComplCache支持多種關鍵詞索 引模式,例如它會判斷當前路徑下的文件或目錄的名字是否匹配補全條件,也可以從緩存 的程序語言API中匹配補全條件。到此為止,它就解決了SuperTab和AutoComplPop共同的 效率問題,並具備它們各自的長處。看了一遍文檔,發現這個插件的功能比較細緻,大概 有以下一些特點: 1、使用緩存,自動補全時效率高; 2、生成的關鍵詞列表準確; 3、支持下劃線分割的關鍵詞,如apple_boy_cat,就可以只輸入a_b_c,然後補全; 4、支持駝峰格式匹配關鍵詞,如AppleBoyCat,就可以只輸入ABC,然後補全; 5、既可以像AutoComplPop那樣在Vim中輸入的同時自動彈出補全列表,又可以自定義快捷 鍵手動觸發; 6、支持從文件名和目錄名中匹配補全條件; 7、對於程序源文件,支持從語言API中匹配補全條件; NeoComplCache的缺點是文檔不全,雖然從隻言片語中發現它還支持Snippet,但從文檔中 沒有找到足夠的有用信息。加之一直用SnipMate感覺不錯,所以目前還是用它來實現 snippet功能。 這就有個搭配問題:雖然NeoComplCache不存在補全時的效率問題,但我仍然打算只在需 要補全時才用快捷鍵觸發此功能,最主要的原因是我既希望用Tab鍵觸發SnipMate的代碼 塊補全功能,又希望修SuperTab那樣用Tab選擇補全列表中的選項。也就是要達到只用Tab 鍵就可以完成打開自動補全列表、補全列表選項選擇和SnipMate代碼塊替換的效果。但是 ,如果將Tab映射到觸發自動補全,則補全列表選擇和SnipMate均無法使用Tab,反之亦然 。 所以我想如果能讓NeoComplCache、SuperTab、SnipMate和諧共存,那問題就解決了,幾 經摸索,終於找到了辦法: 1、設置NeoComplCache不自動彈出補全列表,即在vimrc中加入: let g:NeoComplCache_DisableAutoComplete = 1 2、由於NeoComplCache在手工模式下使用快捷鍵組合<C-X><C-U>打開補全列表,故設置 SuperTab的默認補全操作為<C-X><C-U>,即在vimrc中加入: let g:SuperTabDefaultCompletionType = 『<C-X><C-U>『 這樣,NeoComplCache只負責補全關鍵詞緩存的生成,SuperTab控制Tab鍵的行為並在需要 觸發補全操作時打開補全列表、進而在列表中的選項間移動焦點,而當光標前的關鍵詞是 snippet時,SnipMate會被優先調用並完成代碼塊的替換。 就在寫這篇文章的時候,我突然覺得NeoComplCache自動彈出補全列表+SnipMate的方式也 挺好,只是這樣就不能用Tab鍵選擇列表中的選項了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.248.49
文章代碼(AID): #1C0YuDoz (Editor)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
1
完整討論串 (本文為第 2 之 2 篇):
1
1
文章代碼(AID): #1C0YuDoz (Editor)