OmniComplete 並不是插件的名字,而是 Vim 眾多補全方式中的一種(全能補全)。說白了 OmniComplete 其實就是根據光標前的內容猜測光標後的內容,具體怎麼猜取決於所采用的腳本。
而 OmniCppComplete 就是專為 C/C++ 編寫的 OmniComplete 一個補全腳本。
那麼經常和 OmniCppComplete 一起出沒的 Ctags 又是什麼呢?Ctags 全名 Exuberant Ctags,是一個獨立的程序(也就是說,其實和 Vim 一點關系都沒有)。它可以為各種語言的源代碼生成語言元素(language object)索引文件。對於 C/C++ 來說,就是把源代碼中的各種宏、函數、類、類成員等等元素和它們的相關信息生成索引文件,供其它程序使用。
OmniCppComplete 腳本就是根據 Ctags 生成的索引文件進行補全的。
好了,背景知識就是這樣,安裝步驟如下:
PATH
以生成 C++ 標准庫索引文件為例:
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp .
其它庫的索引文件也可以依法炮制,只需切換到該庫的 include 文件夾,執行:
ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f <文件名> .
另外,還需確認在 vimrc 中開啟了 filetype
選項,不然 OmniComplete 無法自動識別 C/C++ 文件類型進行補全。
這樣,在插入模式編輯 C/C++ 源文件時按下 .
或 ->
或 ::
,或者手動按下 Ctrl+X Ctrl+O 後就會彈出自動補全窗口,此時可以用 Ctrl+N 和 Ctrl+P 上下移動光標進行選擇。
也許你也已經注意到了一個問題,那就是「自動補全窗口的配色非常之丑」,Vim 自帶的幾個配色方案中只有兩三種配色改掉了自動補全窗口丑陋的紫色,其它的基本上都是很逆天的用灰色表示當前選中項、紫色表示其他項。
要改變自動補全窗口的配色可以在 vimrc 中加上:
highlight Pmenu guibg=darkgrey guifg=black
highlight PmenuSel guibg=lightgrey guifg=black
Pmenu
是所有項的配色,PmenuSel
是選中項的配色,guibg
和 guifg
分別對應背景色和前景色。