2013-02-21 105 views
3

我使用vim進行C++代碼編輯。但是它的代碼完成不太好(儘管我已經嘗試了許多插件,例如OmniCppComplete)。 Qt Creator的代碼完成非常棒,它也有vim風格的編輯功能,對我來說已經足夠了。只有對我來說不太好的是,我不能在Qt Creator中使用ctags功能(儘管Qt Creator具有去定義類的功能,但是需要更多的時間來解析源代碼)。Qt Creator標記文件

是否有可能創建源代碼標記文件,並在Qt Creator中以虛擬vim模式使用它?

+0

QtCreator只有「fakevim」而不是vim嵌入。可能除了基本的vim功能以外都不支持。 – 2013-02-21 11:08:08

回答

5

Vim中的C++代碼完成實際上是優越的。我將概述你必須採取的步驟才能使其工作。然而,在這裏我不會詳細討論(比如構建龐大的開源代碼庫,克隆存儲庫,安裝Vim插件等),否則值得爲新手編寫一個大型教程。因此,假設你是良好的意識和充分準備的軟件開發人員,你去那裏能說一口流利指南:

  1. 獲取並安裝clang_complete(插件VIM);

  2. 獲取並安裝neocomplcache(Vim的插件);

  3. 如果你在Unix上,那麼你很幸運,因爲你可能已經在你的系統上安裝了LLVMClang,或者你必須使用軟件包管理器並使用一個命令來安裝它們。如果是這樣,那麼你可以立即跳到最後一步(#7)。

    如果你在Windows上,那麼你就不那麼幸運了,但從實際的角度來看,這實際上更好 - 你將擁有一個偉大的體驗,可以自己構建巨大的東西,無論發生什麼事情都可以正常工作。 :)

    所以,如果你在Windows上(並使用Qt Creator,我可以看到),那麼你可能已經在你的系統上安裝了MinGW。如果情況並非如此,那麼我強烈建議你安裝一個流血邊緣MinGW-w64。幸運的是,您不必自己編譯它,因爲rubenvb已經在兩種變體中友好地構建了MinGW-w64工具鏈:targeting 64-bit Windows (aka x64)targeting 32-bit Windows (aka x86)。只需根據您的操作系統下載一個。 注意:這些鏈接指向MinGW-w64的最新版本(撰寫本答案時),即基於GCC 4.7.2的穩定版本。 重要事項:確保MinGW-w64位於%PATH%環境變量中。

  4. 需要的另一個軟件是CMake(流行的構建系統)。同樣,如果你在Unix上,它可能已經安裝。如果你在Windows上,那麼只需下載並安裝它。 重要事項:確保CMake位於%PATH%環境變量中。

  5. 我們需要的最後一件事是Python。再一次,如果你在Unix上,那麼它已經安裝在你的系統上。否則,你就知道該做什麼了。 :)正式的,有兩個版本的Python:2.7.3和3.x.x - 你一定要下載並安裝兩者。 Python是任何開發人員機器上的重要軟件。 重要:確保Python2.7.3(不是3.x.x!)在%PATH%環境變量中。

  6. 現在我們已經安裝了MinGW-w64,CMake,Python,我們準備構建LLVM和Clang。爲了緩解痛苦,請轉到我的Out-of-Source Builders項目並向下滾動至指南:使用MinGW-w64構建64位LLVM和Clang for Windows(64位)。如果您在32位Windows上,請不要在標題中注意64位(沒關係),只需按照說明操作即可。等待大約一個小時,直到LLVM和Clang建成。

  7. 我們差不多完成了,剩下的就是正確配置Vim。在這裏,我將簡單地提供我的配置,它很可能會滿足您的需求。

配置neocomplcache


let g:neocomplcache_enable_at_startup   = 1 
let g:neocomplcache_enable_smart_case   = 1 
let g:neocomplcache_enable_camel_case_completion = 1 
let g:neocomplcache_enable_underbar_completion = 1 
let g:neocomplcache_min_syntax_length   = 2 

if !exists('g:neocomplcache_force_omni_patterns') 
    let g:neocomplcache_force_omni_patterns = {} 
endif 

let g:neocomplcache_force_overwrite_completefunc = 1 

let g:neocomplcache_force_omni_patterns.c  = '[^.[:digit:] *\t]\%(\.\|->\)' 
let g:neocomplcache_force_omni_patterns.cpp = '[^.[:digit:] *\t]\%(\.\|->\)' 
    \ . '\|\h\w*::' 
let g:neocomplcache_force_omni_patterns.objc = '[^.[:digit:] *\t]\%(\.\|->\)' 
    \ . '\|\h\w*::' 
let g:neocomplcache_force_omni_patterns.objcpp = '[^.[:digit:] *\t]\%(\.\|->\)' 
    \ . '\|\h\w*::' 

inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>" 
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>" 

配置clang_complete


let g:clang_use_library  = 1 
let g:clang_auto_select  = 0 
let g:clang_complete_auto = 0 
let g:clang_complete_copen = 1 
let g:clang_complete_macros = 1 
let g:clang_complete_patters = 1 

let g:clang_library_path = 'D:/Toolchains/x64/LLVM/3.3/bin' 

let g:clang_auto_user_options = 'path, .clang_complete' 

有關這兩個插件的詳細信息,使用Vim的幫助文檔::h clang_complete一nd :h neocomplcache。有很多選項可以調整,特別是在neocomplcache。從我的角度來看,對於任何使用Vim的C++開發人員來說,這兩個插件都必須具有

備註:如果您不知道如何完成此處列出的某些步驟,則必須在此處詢問StackOverflow的其他問題,或者查看其他位置以瞭解此答案開頭所述的原因。

我希望這會有所幫助,而且從現在開始,您會更青睞Vim。 :)