Vim外掛之vim-clang和clang complete
阿新 • • 發佈:2018-12-14
在Vim所有的外掛裡面,YouCompleteMe 無疑是最強大的了,但安裝也是異常的繁瑣,在Windows平臺上更加麻煩,下面介紹兩個基於clang
的外掛可以部分替代YCM的功能(主要面向C家族)。
clang complete
首先介紹clang complete,YCM對C家族的補全就是基於它,功能之強大不用多提,使用它必須先下載安裝LLVM並將其新增到系統環境變數中(下面提到的vim-clang外掛也需要這麼做),之後安裝clang complete並寫入下面的配置即可
"clang complete
"自動選擇第一個匹配項但不插入到程式碼中
let g:clang_auto_select = 1
"在->. ., ::後自動補全
let g:clang_complete_auto = 1
"發現錯誤之後開啟QuickFix視窗
let g:clang_complete_copen = 1
"高亮警告和錯誤
let g:clang_hl_errors = 1
"插入第一個補全後關閉預覽視窗
let g:clang_close_preview = 1
"開啟對C++11的編譯支援
let g:clang_user_options = '-std=c++11'
"設定clang庫路徑
let g:clang_library_path = 'C:\Program Files (x86)\LLVM\bin'
"補全預處理指令,巨集和常數,預設為0,不補全
let g:clang_complete_macros = 1
"補全程式碼模式,比如迴圈等,預設為0,不補全
let g:clang_complete_patterns = 1
"<C-]>跳轉到宣告
let g:clang_jumpto_declaration_key = "<C-]>"
"<C-w>]在預覽視窗中開啟宣告
let g:clang_jumpto_declaration_in_preview_key = "<C-w>]"
"<C-t>回跳
let g:clang_jumpto_back_key = " <C-t>"
"使用UltiSnips進行程式碼片段補全
let g:clang_snippets = 1
let g:clang_snippets_engine = 'ultisnips'
上面設定的clang庫路徑,請根據你的電腦上llvm安裝的位置進行修改,另外這個外掛與Vim自帶的Omni completion
有衝突,要使用它必須關閉Omni completion。
vim-clang
vim-clang是在clang complete的啟發下開發的,主要特點是補全速度快,支援格式化程式碼,配置如下
"vim-clang
"開啟對C11和C++11的支援
let g:clang_c_options = '-std=gnu11'
let g:clang_cpp_options = '-std=c++11 -stdlib=libc++'
"關閉語法檢查
let g:clang_check_syntax_auto = 0
"不要自動格式化程式碼
let g:clang_format_auto = 0
"程式碼格式化風格選項依次有LLVM,Google,Chromium,Mozilla,WebKit
"let g:clang_format_style = 'LLVM'
"使得vim-clang的補全與其他IDE一致
let g:clang_cpp_completeopt = 'longest,menuone,preview'
Vim自帶的補全
當然,你想簡單一點也可以使用Vim自帶的補全,具體見下表
按鍵 | 補全物件 |
---|---|
Ctrl-X Ctrl-F | 檔名 |
Ctrl-X Ctrl-L | 整行 |
Ctrl-X Ctrl-D | 巨集定義 (包括包含檔案裡的) |
Ctrl-X Ctrl-I | 當前檔案以及所包含的檔案 |
Ctrl-X Ctrl-K | 字典檔案內的單詞 |
Ctrl-X Ctrl-T | 同義詞詞典檔案內的單詞 |
Ctrl-X Ctrl-] | 標籤 |
Ctrl-X Ctrl-V | Vim命令列 |
Ctrl-X Ctrl-O | 使用Vim自帶的Omni completion |
Ctrl-N | 下一個匹配項 |
Ctrl-P | 上一個匹配項 |
Ctrl-A | 重複上一次插入的文字 |