歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Vim 中使用 OmniComplete 為 C/C++ 自動補全

Vim 中使用 OmniComplete 為 C/C++ 自動補全

日期:2017/2/28 14:50:32   编辑:Linux教程

OmniComplete 並不是插件的名字,而是 Vim 眾多補全方式中的一種(全能補全)。說白了 OmniComplete 其實就是根據光標前的內容猜測光標後的內容,具體怎麼猜取決於所采用的腳本。

而 OmniCppComplete 就是專為 C/C++ 編寫的 OmniComplete 一個補全腳本。

那麼經常和 OmniCppComplete 一起出沒的 Ctags 又是什麼呢?Ctags 全名 Exuberant Ctags,是一個獨立的程序(也就是說,其實和 Vim 一點關系都沒有)。它可以為各種語言的源代碼生成語言元素(language object)索引文件。對於 C/C++ 來說,就是把源代碼中的各種宏、函數、類、類成員等等元素和它們的相關信息生成索引文件,供其它程序使用。

OmniCppComplete 腳本就是根據 Ctags 生成的索引文件進行補全的。

好了,背景知識就是這樣,安裝步驟如下:

安裝 Ctags

  1. 從官網下載 Ctags 可執行文件,網站是 http://ctags.sourceforge.net/
  2. 將下載到的文件(僅 EXE 文件即可)解壓到一個目錄,例如 D:/ctags
  3. 將該目錄加入環境變量 PATH

准備索引文件

以生成 C++ 標准庫索引文件為例:

  1. 下載專為 Ctags 修改過的 libstdc++ 頭文件
  2. 將其解壓到一個目錄,例如 D:/ctags/cpp_src
  3. 使用命令行進入 D:/ctags/cpp_src 後執行:
    ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpp .
  4. 建議將上一步生成的 D:/ctags/cpp_src/cpp 文件放到一個專門放置索引文件的目錄以便後面的統一設置,例如放到 D:/ctags/tags

其它庫的索引文件也可以依法炮制,只需切換到該庫的 include 文件夾,執行:

ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f <文件名> .

安裝 OmniCppComplete

  1. 下載 OmniCppComplete
  2. 將下載到的文件解壓到 Vim 安裝目錄的 vimfiles 文件夾
  3. 在 vimrc 文件中加入
" ctags 索引文件 (根據已經生成的索引文件添加即可, 這裡我額外添加了 hge 和 curl 的索引文件)
set tags+=D:/ctags/tags/cpp set tags+=D:/ctags/tags/hge
set tags+=D:/ctags/tags/curl " OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 顯示函數參數列表
let OmniCpp_MayCompleteDot = 1 " 輸入 . 後自動補全
let OmniCpp_MayCompleteArrow = 1 " 輸入 -> 後自動補全
let OmniCpp_MayCompleteScope = 1 " 輸入 :: 後自動補全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自動關閉補全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest

另外,還需確認在 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 是選中項的配色,guibgguifg 分別對應背景色和前景色。

Copyright © Linux教程網 All Rights Reserved