使用Ubuntu和vim已經有一段時間了,對於Vim下的插件應用,我老是抱着一股狂熱的態度。此次,又在網上閒逛着,發現了一個我的博客提到了Vim代碼補全這回事,並提到了YouCompleteMe這個插件。頓時激起了我折騰的慾望。之前我都是使用Ctags+<C-n>或<C-p>來進行補全,然而其命中率卻比較低,有時候根本就亂匹配。因而決定將YouCompleteMe這個插件安裝好適用一下,同時,用Vundle也好讓我將.vim文件夾下的文件清理一下.html
(1)相關連接python
(2)配置VIMlinux
$ sudo add-apt-repository ppa:nmi/vim-snapshots $ sudo apt-get update $ sudo apt-get install vim
某些PPA也提供了源地址,那麼就能夠直接打開/etc/apt/source.list進行添加。兩者的本質是同樣的。如從源碼編譯vim,可參考這裏。c++
$ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
以上命令直接將源代碼檢出到了~/.vim/bundle/vundle這個目錄下。git
set nocompatible " be iMproved filetype off " required! set rtp+=~/.vim/bundle/vundle/ call vundle#rc() " let Vundle manage Vundle " required! Bundle 'gmarik/vundle' " My bundles here: " " original repos on GitHub Bundle 'tpope/vim-fugitive' Bundle 'Lokaltog/vim-easymotion' Bundle 'rstacruz/sparkup', {'rtp': 'vim/'} Bundle 'tpope/vim-rails.git' " vim-scripts repos Bundle 'L9' Bundle 'FuzzyFinder' " non-GitHub repos Bundle '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沒法更新該插件。基本上這兩種狀況能夠知足咱們大部分人的須要了。github
vundle的使用。先將~/.vim/下面原先安裝的插件都"rm -rf"掉吧,由vundle來接手管理工做。打開一個vim窗口,執行命令:BundleInstall。接下來vundle會自動去網上將相關插件下載下來並安裝好。在此過程當中,vundle還會:helptags命令。所以,咱們能夠直接在vim中查看插件的幫助文檔。要刪除一個插件也很簡單,先在~/.vimrc中移除該插件條目,而後進入vim執行命令:BundleClean。嘿嘿,vundle將自動清除掉插件的文件夾!狂拽炫酷吊炸天!ubuntu
//Checkout LLVM: cd llvmsrc svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm //Checkout Clang: cd llvmsrc cd llvm/tools svn co http://llvm.org/svn/llvm-project/cfe/trunk clang //Checkout Compiler-RT: cd llvmsrc cd llvm/projects svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt //Get the Test Suite Source Code [Optional] cd llvmsrc cd llvm/projects svn co http://llvm.org/svn/llvm-project/test-suite/trunk test-suite //Configure and build LLVM and Clang: cd llvmsrc mkdir build (for building without polluting the source dir) cd build ../llvm/configure --enable-optimized
以上步驟中惟一須要注意的是configure的時候,須要指定--enable-optimized參數。不然默認configure的將是Debug版本,問題多多。最後,咱們使用make命令進行編譯。編譯過程比較長,耗時半個小時左右。這一步主要是爲了下面編譯YouCompleteMe插件作準備。vim
(1)編譯YouCompleteMe。沒錯,這個插件須要編譯!在Github項目說明中有詳細的安裝和使用方法,不過呢,官方說明中的Full Installation並無針對Ubuntu13.04 32bit的編譯說明,並且,該說明中使用的是預編譯Clang包。原先按照這個說明執行了一次,可是老是在libclang.so上面出錯,要不就是版本不對,要不就是根本不生成libclang.so。最後在網上找到了一個帖子,再結合官方說明編譯成功的。編譯步驟以下:服務器
$ 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)須要替換成本身對應的路徑。架構
關於make。在官方文檔中只使用了:make ycm_support_libs.而我在實際操做中卻屢屢失敗。實際上,首先要執行:make ycm_core。這樣將在~/.vim/bundle/YouCompleteMe/python/目錄下自動生成兩個文件(libclang.so和ycm_core.so),以下圖:
'-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的幫助文件或者上網搜索。
(2)Syntastic和Vundle的安裝很簡單,主要在於配置,因此就不花時間講解安裝,看看配置就能夠了。而重點和難點在於YouCompleteMe和Clang的編譯工做,這兩個編譯步驟都比較複雜,編譯耗時較長。因此花了很大篇幅講解。
(1)效果圖。這是補全C++的圖,圖中紅色的小叉是Syntastic的效果。若是須要補全C,還得去.ycm_extra_conf.py中修改一下。
沒有想到的是,YCM還能補全文件和目錄。。。
下面是Syntastic的效果圖,警告和錯誤標誌可配置,光標在錯誤行時,vim的命令行會有相關錯誤信息:
(2)遇到的問題。
(3)相關說明。
""""""""" Settings of taglist"""""""""""""" " increase the width of the taglist window let Tlist_WinWidth=10 " automatically open the taglist window let Tlist_Auto_Open=0 " exit wim when only the taglist window exist let Tlist_Exit_OnlyWindow=1 " open tags with single click let Tlist_Use_SingleClick=1 " close tag folds for inactive buffers let 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 files let Tlist_Auto_Update=1 """""""""" NERDtree settings""""""""""""""" let NERDTreeWinPos='right' """""""""" mini buffer navigator""""""""""" let g:miniBUfExplMapWindowNavVim=1 let g:miniBufExplMapWindowNavArrows=1 let g:miniBufExplMapCTabSwitchBufs=1 let g:miniBufExplModSelTarget=1 let g:miniBufExplUseSingleClick=1 """"""""""""ctags settings""""""""""""""""" set tags+=~/.vim/cpptags set tags+=~/.vim/systags """""""""""color scheme"""""""""""""""""""" let g:molokai_original=1 """"""""""""vundle""""""""""""""""""""""""" set nocompatible set 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 = 1 let g:syntastic_cpp_include_dirs = ['/usr/include/'] let g:syntastic_cpp_remove_include_errors = 1 let g:syntastic_cpp_check_header = 1 let g:syntastic_cpp_compiler = 'clang++' let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++' "set error or warning signs let g:syntastic_error_symbol = '✗' let g:syntastic_warning_symbol = '⚠' "whether to show balloons let 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 = 1 let g:ycm_seed_identifiers_with_syntax = 1 let g:ycm_confirm_extra_conf = 0
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)參考連接: