【轉】Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

來源:互聯網
上載者:User

標籤:

原文網址:http://www.cnblogs.com/csuftzzk/p/3435710.html

序言

    使用Ubuntu和vim已經有一段時間了,對於Vim下的外掛程式應用,我總是抱著一股狂熱的態度。這次,又在網上閑逛著,發現了一個個人部落格提到了Vim代碼補全這回事,並提到了YouCompleteMe這個外掛程式。頓時激起了我折騰的慾望。以前我都是使用Ctags+<C-n>或<C-p>來進行補全,然而其命中率卻比較低,有時候根本就亂匹配。於是決定將YouCompleteMe這個外掛程式安裝好適用一下,同時,用Vundle也好讓我將.vim檔案夾下的檔案清理一下.

一、準備

(1)相關連結

  1. PPA for vim 7.4. YouCompleteMe外掛程式要求Vim 版本在7.3.584及以上,而Ubuntu13.04源中的Vim已經比較老了。所以,我們可以在源中添加PPA,或者編譯源碼手動更新VIM的版本。
  2. Vundle. 這是一個新生代vim外掛程式管理器,使用git進行外掛程式安裝和更新。以前有一個pathogen。外掛程式管理器的好處是:使用簡單,自動化管理vim的外掛程式。讓你的.vim檔案夾遠離混亂不堪的窘境,從此一手.vimrc走天下。
  3. Clang+LLVM. LLVM+Clang是Apple公司資助的一個項目,YouCompleteMe精確的補全功能完全依賴於Clang的代碼解析。我們需要安裝好Clang 3.2+以便為YCM提供支援。
  4. SVN和Git。用於從程式碼程式庫中檢出原始碼。在Ubuntu下這兩個軟體的安裝都非常簡單,使用apt-get命令即可安裝完成。
  5. YouCompleteMe和Syntastic.這兩個外掛程式都是配合使用的。YCM不用再說,Syntastic用於源碼的即時檢查。具體效果如同Eclipse一樣,在代碼編寫的過程中即可即時報告語法錯誤。
  6. Cmake.後面在編譯過程中會使用到,安裝命令:sudo apt-get install cmake.

(2)配置VIM

  1. 升級到7.3.584+。Ubuntu下需要手動添加PPA(Personal Package Archives),可以使用命令列add-apt-repository來進行添加,如:
    $ sudo add-apt-repository ppa:nmi/vim-snapshots$ sudo apt-get update$ sudo apt-get install vim

    某些PPA也提供了源地址,那麼就可以直接開啟/etc/apt/source.list進行添加。二者的本質是一樣的。如從源碼編譯vim,可參考這裡。

  2. 下載Vundle。Vundle託管在Github上,需要使用到git來檢出原始碼。
    $ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

    以上命令直接將原始碼檢出到了~/.vim/bundle/vundle這個目錄下。

  3. 下載完了vundle後,需要配置好.vimrc檔案。需要配置的模板如下(摘在github):
    set nocompatible              " be iMprovedfiletype off                  " required!set rtp+=~/.vim/bundle/vundle/call vundle#rc()" let Vundle manage Vundle" required! Bundle ‘gmarik/vundle‘" My bundles here:"" original repos on GitHubBundle ‘tpope/vim-fugitive‘Bundle ‘Lokaltog/vim-easymotion‘Bundle ‘rstacruz/sparkup‘, {‘rtp‘: ‘vim/‘}Bundle ‘tpope/vim-rails.git‘" vim-scripts reposBundle ‘L9‘Bundle ‘FuzzyFinder‘" non-GitHub reposBundle ‘git://git.wincent.com/command-t.git‘" Git repos on your local machine (i.e. when working on your own plugin)Bundle ‘file:///Users/gmarik/path/to/plugin‘" ...filetype plugin indent on     " required!

    其中需要說明的是:filetype off這一條實際上並不需要。因為這條命令將導致文法著色失敗。我的.vimrc裡面並沒配置這一條。當所需要的vim外掛程式託管在Github上時,該外掛程式的可寫成“Bundle ‘scrooloose/syntastic‘”;當外掛程式在www.vim.org上面時,我們只需要寫明該外掛程式的名稱,還要加上.vim副檔名。否則vundle無法更新該外掛程式。基本上這兩種情況可以滿足我們大部分人的需要了。

  4. vundle的使用。先將~/.vim/下面原先安裝的外掛程式都"rm -rf"掉吧,由vundle來接手管理工作。開啟一個vim視窗,執行命令:BundleInstall。接下來vundle會自動去網上將相關外掛程式下載下來並安裝好。在此過程中,vundle還會:helptags命令。因此,我們可以直接在vim中查看外掛程式的協助文檔。要刪除一個外掛程式也很簡單,先在~/.vimrc中移除該外掛程式條目,然後進入vim執行命令:BundleClean。嘿嘿,vundle將自動清除掉外掛程式的檔案夾!狂拽炫酷吊炸天!

  5. 編譯LLVM+Clang的原始碼。在http://clang.llvm.org上面Clang 3.3並沒有Ubuntu13.04 32bit的先行編譯的二進位程式,所以只好下載源碼進行手工編譯。命令如下:
    //Checkout LLVM:cd llvmsrcsvn co http://llvm.org/svn/llvm-project/llvm/trunk llvm//Checkout Clang:cd llvmsrccd llvm/toolssvn co http://llvm.org/svn/llvm-project/cfe/trunk clang//Checkout Compiler-RT:cd llvmsrccd llvm/projectssvn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt//Get the Test Suite Source Code [Optional]cd llvmsrccd llvm/projectssvn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite//Configure and build LLVM and Clang:cd llvmsrcmkdir build (for building without polluting the source dir)cd build../llvm/configure --enable-optimized

    以上步驟中唯一需要注意的是configure的時候,需要指定--enable-optimized參數。否則預設configure的將是Debug版本,問題多多。最後,我們使用make命令進行編譯。編譯過程比較長,耗時半個小時左右。這一步主要是為了下面編譯YouCompleteMe外掛程式做準備。

二、配置

(1)編譯YouCompleteMe。沒錯,這個外掛程式需要編譯!在Github項目說明中有詳細的安裝和使用方法,不過呢,官方說明中的Full Installation並沒有針對Ubuntu13.04 32bit的編譯說明,而且,該說明中使用的是先行編譯Clang包。原先按照這個說明執行了一次,但是總是在libclang.so上面出錯,要不就是版本不對,要不就是根本不產生libclang.so。最後在網上找到了一個文章,再結合官方說明編譯成功的。編譯步驟如下:

  1. 下載源碼。我們在前面使用vundle已經下載好了,因此這一步跳過。
  2. 執行命令:
    $ cd ~ $ mkdir ~/ycm_build$ cd ~/ycm_build$ cmake -G "Unix Makefiles"  ~/.vim/bundle/YouCompleteMe/cpp -DEXTERNAL_LIBCLANG_PATH=~/ycm_temp/llvmsrc/lib/libclang.so $ make ycm_core

    這裡要注意的是-DEXTERNAL_LIBCLANG_PATH這個參數,用於指定libclang.so的位置。如果不指定的話,YCM將無法正常工作,總是報:The YCM shut down, crash report...之類的錯誤。而這個libclang.so就是我們在編譯Clang的時候產生的。因此,相關路徑(也即~/ycm_temp/llvmsrc/lib/libclang.so)需要替換成自己對應的路徑。

  3. 關於make。在官方文檔中只使用了:make ycm_support_libs.而我在實際操作中卻屢屢失敗。實際上,首先要執行:make ycm_core。這樣將在~/.vim/bundle/YouCompleteMe/python/目錄下自動產生兩個檔案(libclang.so和ycm_core.so),如:

  4. 這還是不夠的,還必須執行命令:make ycm_support_libs。 這條命令才會產生第三個檔案ycm_client_support.so。因為,YouCompleteMe是C/S架構的,所以存在伺服器和服務端的說 法。另外,在/tmp/ycm_temp/目錄下還可以看到服務和請求日誌,更加可以驗證這一點。
  5. 最後,為了能順利的完成配置工作,我們還需要配置一下.ycm_extra_conf.py這個檔案。項目說明中有個配置模板,我們需要做改動的就是flags部分。使用-isystem標誌添加系統的標頭檔進行解析,而-I標誌用於添加第三分的標頭檔進行解析。我的flags在最後增加如下:
    ‘-isystem‘,‘/usr/include‘,‘-isystem‘,‘/usr/include/c++/‘,‘-isystem‘,‘/usr/include/i386-linux-gnu/c++‘

    此外,為了更好的提高補全效率,我們可以保留原先使用的用Ctags產生的tags檔案,並在~/.vimrc中添加:let g:ycm_collect_identifiers_from_tag_files = 1.其中,在vim中使用 :echo tagfiles()可以查看當前使用的tags檔案。至於產生tags檔案的方法,可以看Ctags的協助檔案或者上網搜尋。

  6. 至此,配置尚未結束。.ycm_extra_conf.py檔案可以是針對工程而言,也可以設定全域的。對工程而言,放在工程的根目錄即可。不過每次開啟檔案都會詢問是否載入,這時可以在~/.vimrc中設定:let g:ycm_confirm_extra_conf=0來關閉提示。如果是針對全域的,那麼可以在~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py中設定。如果沒有問題,應該可以看到YouCompleteMe強大的一面了,效果在下面。

(2)Syntastic和Vundle的安裝很簡單,主要在於配置,所以就不花時間講解安裝,看看配置就可以了。而重點和痛點在於YouCompleteMe和Clang的編譯工作,這兩個編譯步驟都比較複雜,編譯耗時較長。所以花了很大篇幅講解。

三、附錄

(1)。這是補全C++的圖,圖中紅色的小叉是Syntastic的效果。如果需要補全C,還得去.ycm_extra_conf.py中修改一下。

沒有想到的是,YCM還能補全檔案和目錄。。。

下面是Syntastic的,警告和錯誤標誌可配置,游標在錯誤行時,vim的命令列會有相關錯誤資訊:

(2)遇到的問題。

  1. libclang.so的版本一定要在3.2+,否則YCM無法正常工作。必須要通過上面的make ycm_core和make ycm_support_libs來產生上述的三個.so檔案,不能手工拷貝。
  2. 如果出現bits/c++config.h檔案無法找到的錯誤.那麼可以考慮將系統中存在的c++config.h檔案所在的檔案夾中的所有檔案,拷貝到/usr/include/c++/4.8/bits目錄下,參考連結!

(3)相關說明。

  1. 編譯vim源碼的時候,需要開啟python選項。
  2. vundle中的外掛程式條目,如果託管在www.vim.org上,需要加.vim副檔名。
  3. 一個較為完善的.vimrc模板。
  4. 我的部分外掛程式配置:
    """"""""" Settings of taglist""""""""""""""" increase the width of the taglist windowlet Tlist_WinWidth=10" automatically open the taglist window let Tlist_Auto_Open=0" exit wim when only the taglist window existlet Tlist_Exit_OnlyWindow=1" open tags with single clicklet Tlist_Use_SingleClick=1" close tag folds for inactive bufferslet Tlist_File_Fold_Auto_Close=1" show the fold indicator column in the taglist window let Tlist_Enable_Fold_Column=1" Automatically update the taglist to include newly edited fileslet Tlist_Auto_Update=1"""""""""" NERDtree settings"""""""""""""""let NERDTreeWinPos=‘right‘"""""""""" mini buffer navigator"""""""""""let g:miniBUfExplMapWindowNavVim=1let g:miniBufExplMapWindowNavArrows=1let g:miniBufExplMapCTabSwitchBufs=1let g:miniBufExplModSelTarget=1 let g:miniBufExplUseSingleClick=1""""""""""""ctags settings"""""""""""""""""set tags+=~/.vim/cpptagsset tags+=~/.vim/systags"""""""""""color scheme""""""""""""""""""""let g:molokai_original=1""""""""""""vundle"""""""""""""""""""""""""set nocompatibleset rtp+=~/.vim/bundle/vundle/call vundle#rc()   " let Vundle manage Vundle" required! Bundle ‘gmarik/vundle‘""""""""vim scripts""""""""""""""""""Bundle ‘taglist.vim‘Bundle ‘c.vim‘Bundle ‘minibufexpl.vim‘Bundle ‘grep.vim‘Bundle ‘mru.vim‘Bundle ‘comments.vim‘""""""""git repo"""""""""""""""Bundle ‘scrooloose/nerdtree‘Bundle ‘Valloric/YouCompleteMe‘Bundle ‘vim-scripts/AutoClose‘Bundle ‘scrooloose/syntastic‘Bundle ‘Lokaltog/vim-powerline‘""""""""""syntastic""""""""""""let g:syntastic_check_on_open = 1let g:syntastic_cpp_include_dirs = [‘/usr/include/‘]let g:syntastic_cpp_remove_include_errors = 1let g:syntastic_cpp_check_header = 1let g:syntastic_cpp_compiler = ‘clang++‘let g:syntastic_cpp_compiler_options = ‘-std=c++11 -stdlib=libstdc++‘"set error or warning signslet g:syntastic_error_symbol = ‘?‘let g:syntastic_warning_symbol = ‘?‘"whether to show balloonslet g:syntastic_enable_balloons = 1""""""""""""YCM""""""""""""""""""""let g:ycm_global_ycm_extra_conf = ‘~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py‘let g:ycm_collect_identifiers_from_tags_files = 1let g:ycm_seed_identifiers_with_syntax = 1let g:ycm_confirm_extra_conf = 0
  5. 推薦的較為好用的外掛程式包括:
    439 """"""""vim scripts""""""""""""""""""440 Bundle ‘taglist.vim‘441 Bundle ‘c.vim‘442 Bundle ‘minibufexpl.vim‘443 Bundle ‘grep.vim‘444 Bundle ‘mru.vim‘445 Bundle ‘comments.vim‘446 447 """"""""git repo"""""""""""""""448 Bundle ‘scrooloose/nerdtree‘449 Bundle ‘Valloric/YouCompleteMe‘450 Bundle ‘vim-scripts/AutoClose‘451 Bundle ‘scrooloose/syntastic‘452 Bundle ‘Lokaltog/vim-powerline‘ 
    Bundle ‘kien/ctrlp.vim‘

(4)參考連結:

  1. cold‘s world
  2. http://stackoverflow.com/questions/18028071/vim-c-ycm-and-syntastic-include-path-problems
  3. http://stackoverflow.com/questions/9201521/g-4-6-issue-no-bits-cconfig-h-file-as-required-by-the-header-cstring
  4. http://www.cplusplus.com/forum/unices/114261/
  5. http://blog.csdn.net/ywh147/article/details/13625905(價值較高)
  6. http://williamherry.com/blog/2012/08/25/master-vim-04-ctrlp/
  7. http://www.bestofvim.com/plugin/ctrl-p/

【轉】Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.