1. 程式人生 > >ubuntu下vim和Youcompleteme一起共建美好c++樂園

ubuntu下vim和Youcompleteme一起共建美好c++樂園

我主要參考的資料就是github上面的資料,最好仔細看看,一切以官方文件為準,很多人包括我自己不仔細看官方資料導致安裝外掛失敗

官方原文These instructions (using install.py) are the quickest way to install YouCompleteMe, however they may not work for everyone. If the following instructions don’t work for you, check out the full installation guide.直接用./install.py失敗的小夥伴應該使用完整的編譯方式,這是參照官網上

完整的安裝編譯方式

  • 官方提供的補全效果圖
    Alt text

下面開始安裝VIM8.0,如果你電腦上有vim,請把它解除安裝乾淨.

1.sudo add-apt-repository ppa:jonathonf/vim
2.sudo apt-get update
3.sudo apt-get install vim

sudo apt-get install g++ cmake python-dev python3-dev gcc
  • 安裝好Vundle這個管理外掛(點開連結按照教程即可)

  • 注意:如果你在PluginInstall的時候下面提示#install#new#(只大概記得是這樣的),此刻你就需要把etc/vim/vimrc裡面的runtime! debian.vim移到最上面就行即可解決

下面我們安裝YouCompleteMe這個外掛
這是官方推薦的安裝方法

    call vundle#begin()
    ......
    Plugin 'Valloric/YouCompleteMe'
    ......
    call vundle#end()

vimrc配置好了之後開啟vim,執行

 :PluginInstall

如果這種方法無法下載YoucompleteMe,直接到~/.vim/bundle目錄下使用命令列

git clone --recursive https://github.com/Valloric/YouCompleteMe.git

cd YoucompleteMe

git submodule update --init --recursive

寫c和c++嘛,自然要標頭檔案的補全啊,官方要求libclang版本要在3.9以上,那麼我們就選擇相對應的把libclang版本下載下來,然後在home目錄下建立ycm_temp資料夾,並把下載的檔案解壓在此資料夾下,並把解壓後的檔名字改為llvm_root_dir,然後再建立一個新的資料夾ycm_build,然後在此資料夾下執行下面的語句

cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp

cmake --build . --target ycm_core --config Release

下面把這兩句新增到你的vimrc中

let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'(按照你的.ycm_extra_conf.py的路徑來)

let g:ycm_server_python_interpreter='/usr/bin/python'

執行命令

sudo vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

在.ycm_extra_conf.py中找到如下所示的位置Alt text
新增下面的幾行

'isystem',   (注意每句話後面都有逗號)
'/usr/include',
'isystem',
'/usr/include/c++/5.4.0',(我的c++版本是5.4.0,你們按照自己的情況選擇版本)

如果有用於ros的補全和檢錯,請把這裡配置好的的.ycm_extra_conf.py檔案覆蓋你的.ycm_extra_conf.py

這裡是我的vimrc配置,功能如下所列,都有註釋,可以自己索取所需
1.對C/C++和python的補全,檢錯,以及格式化(類似vs中的格式化程式碼)
2.對括號引號的匹配
3.註釋和反註釋
4.一鍵編譯和執行

runtime! debian.vim

set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Raimondi/delimitMate'
Plugin 'Valloric/YouCompleteMe'
Plugin 'scrooloose/nerdcommenter'
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
Plugin 'Chiel92/vim-autoformat'
Plugin 'skywind3000/asyncrun.vim'
call vundle#end()            " required
filetype plugin indent on    " required

syntax enable 
syntax on
set nu
set hls
set tabstop=4
set shiftwidth=4
set ignorecase
set wrap
set autoindent
set completeopt=longest,menu    "讓Vim的補全選單行為與一般IDE一致(參考VimTip1228)

" Source a global configuration file if available
if filereadable("/home/raysuner/.vimrc.local")
  source /home/raysuner/.vimrc.local
endif

" Starting YouCompleteMe configure 
let mapleader=" "
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap <leader>gi :YcmCompleter GoToInclude<CR>
nnoremap <leader>d :YcmShowDetailedDiagnostic<CR>
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>

let g:ycm_enable_diagnostic_highlighting = 0
let g:ycm_error_symbol='>>'
let g:ycm_warning_symbol='!!'
let g:ycm_cache_omnifunc=0 " 禁止快取匹配項,每次都重新生成匹配項
let g:ycm_min_num_of_chars_for_completion=1 " 從第1個鍵入字元就開始羅列匹配項
let g:ycm_seed_identifiers_with_syntax=1    " 語法關鍵字補全
let g:ycm_complete_in_strings = 1 " 在字串的中的位置也會被收入補全
let g:ycm_collect_identifiers_from_comments_and_strings = 0 " 註釋和字串中的文字也會被收入補全
let g:ycm_server_python_interpreter='/usr/bin/python2.7'
let g:ycm_global_ycm_extra_conf='~/.ycm_extra_conf.py'
"Ending YouCompleteMe configure

"Starting NeadTree configure
"auto vimenter * NERDTree " 自動開啟NERDTree
" 按F12來進行開關
map <F12> :NERDTreeToggle<CR>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary") | q | endif "當只剩下NERDTree而沒有其他檔案時,自動關閉
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'

" Starting auto-format configure
nnoremap <F3> :Autoformat<CR>
let g:autoformat_verbosemode=1
let g:formatdef_allman = '"astyle --style=allman --pad-oper"'
let g:formatters_cpp = ['allman']
let g:formatters_c = ['allman']
let g:formatter_yapf_style = 'pep8'
"一鍵執行
func! CompileGcc()
    exec "w"
    let compilecmd="!gcc "
    let compileflag="-o %< "
    if search("mpi\.h") != 0
        let compilecmd = "!mpicc "
    endif
    if search("glut\.h") != 0
        let compileflag .= " -lglut -lGLU -lGL "
    endif
    if search("cv\.h") != 0
        let compileflag .= " -lcv -lhighgui -lcvaux "
    endif
    if search("omp\.h") != 0
        let compileflag .= " -fopenmp "
    endif
    if search("math\.h") != 0
        let compileflag .= " -lm "
    endif
    exec compilecmd." % ".compileflag
endfunc

func! CompileGpp()
    exec "w"
    let compilecmd="!g++ "
    let compileflag="-o %< "
    if search("mpi\.h") != 0
        let compilecmd = "!mpic++ "
    endif
    if search("glut\.h") != 0
        let compileflag .= " -lglut -lGLU -lGL "
    endif
    if search("cv\.h") != 0
        let compileflag .= " -lcv -lhighgui -lcvaux "
    endif
    if search("omp\.h") != 0
        let compileflag .= " -fopenmp "
    endif
    if search("math\.h") != 0
        let compileflag .= " -lm "
    endif
    exec compilecmd." % ".compileflag
endfunc

func! RunPython()
        exec "!python %"
endfunc


func! CompileCode()
        exec "w"
        if &filetype == "cpp"
                exec "call CompileGpp()"
        elseif &filetype == "c"
                exec "call CompileGcc()"
        elseif &filetype == "python"
                exec "call RunPython()"
        endif
endfunc

func! RunResult()
        exec "w"
        if search("mpi\.h") != 0
            exec "!mpirun -np 4 ./%<"
        elseif &filetype == "cpp"
            exec "! ./%<"
        elseif &filetype == "c"
            exec "! ./%<"
        elseif &filetype == "python"
            exec "call RunPython()"
        endif
endfunc

map <F9> :call CompileCode()<CR>
imap <F9> <ESC>:call CompileCode()<CR>
vmap <F9> <ESC>:call CompileCode()<CR>
map <F10> :call RunResult()<CR>

再開啟vim試試youcomplete高效的補全和檢錯,如果覺得不錯的話請右上角來波贊~~~~

相關推薦

ubuntuvimYoucompleteme一起共建美好c++樂園

我主要參考的資料就是github上面的資料,最好仔細看看,一切以官方文件為準,很多人包括我自己不仔細看官方資料導致安裝外掛失敗 官方原文These instructions (using install.py) are the quickest way t

Ubuntuvim的外掛配置方法問題彙總

1    安裝vim sudo apt-get install vim 2    建立屬於自己的vim配置檔案.vimrc vim ~/.vimrc 3    為你的命令列,tmux和vim安裝powerline外掛

【小卒ubuntu使用】ubuntuVIM工具的使用優化

對使用ubuntu系統的小白來說,可能第一件迫切需要學的工具就是VIM,剛安裝的VIM,可能介面並不是十分友好,我們可以更改vim的配置檔案,按照我們的需求去修改它,使它變得友好並美化,甚至愛上VIM。 在終端下,輸入命令開啟配置載入項檔案: sudo vim /etc/vim/vimrc

ubuntuvim及man幫助文檔的漢化

set 添加 itl 拷貝 目錄 fork 編輯 encoding mman vim是一個功能超級強大的編輯器,當然我們也可將它配置超強的IDE.這類教程網上非常多,我就不再此贅述了. 我們在使用中對不熟悉的命令,不熟悉的插件的使用方法常常須要查看文檔,全英文環

[轉]在Ubuntu安裝卸載軟件

沒有 googl 編譯選項 進一步 管理員 找到你 unity nic 獲得 轉載:http://os.51cto.com/art/201701/527671.htm 當你從 Windows 系統轉向 Linux 系統的時候,剛開始的體驗絕對是非比尋常的。在 Ubuntu

Ubuntu怎麽編譯並運行CC++Pascal語言?

tro 開始 用戶 步驟 ide gcc 但是 col inf 很多同學在安裝了Ubuntu的環境後,發現在Windows下的許多東西都打不開了,但是用網站上的在線IDE又不是很方便。 所以,ljn教你如何在Ubuntu下編譯並運行C、C++和Pascal。 一.編譯並

Ubuntu安裝使用開源的tts軟體Flite

  Flite是什麼?   Flite是一個小型、快速的TTS系統,是festival的C版本,可用於嵌入式系統,支援WinCE、Palm OS 等。   下載方法: wget http://www.festvox.org/flite/packed/flite-1.4/flite-1.4-rele

Ubuntu JDK SCALA的安裝

0.簡述 Java JDK在Linux系統有兩個版本,一個開源版本OpenJDK,還有一個Oracle官方版本JDK。一般系統中自帶的是OpenJDK,但常用的是Oracle的JDK。所以一般先解除安裝自帶的OpenJDK,再安裝Oracle的JDK。Scala執行與JVM之上,所以若要

ubuntu安裝配置pycharmpyqt5

design auto 界面 yui ces 創建 yun file 在哪裏 PyQt是Python語言的GUI編程解決方案之一。可以用來代替Python內置的Tkinter。其它替代者還有PyGTK、wxPython等。與Qt一樣,PyQt是一個自由軟件。 在Linu

【小卒ubuntu使用】ubuntuzshfish的安裝使用

Fish 是"the friendly interactive shell"的簡稱,最大特點就是方便易用。很多其他 Shell 需要配置才有的功能,Fish 預設提供,不需要任何配置。 shell 有好幾種,目前最常用是 bash 和 zsh。文章本著花最少的時間學習工具的原則介紹;通過接觸zs

UbuntuAnacondaPycharm的配合使用

對於Ubuntu18.04,一開始會有一個系統預設的python直譯器,是3.6版本,位置在/usr/bin/python3.6。可以通過在terminal中輸入python或者python3來檢視。

Ubuntu檢視修改hostname

1. 檢視主機名 2. 修改主機名 2.1 臨時修改主機名 2.2 永久修改主機名 2.3/etc/hostname與/etc/hosts的區別

UbuntuOpenCV2OpenCV3共存的方法

  由於OpenCV3在OpenCV2的基礎上改動比較大,且向下支援不夠好,所以,很多老工程需要用OpenCV2,而新工程又僅支援OpenCV3。如果兩者同時安裝也不衝突,本質上也就是一些三方庫,放在/usr/local/lib下面,但是如果使用FIND_PACKAGE(OpenCV RE

Ubuntu安裝配置KVM

1、檢視CPU是否支援KVM 首先,要安裝 KVM必需要Linux系統所在CPU 是支援硬體虛擬化的,不然將無法正常使用。 在終端中執行如下命令進行驗證: egrep "(svm|vmx)" /proc/cpuinfo 如果有內容輸出,則說明支援。

Ubuntu 使用者組新增與刪除操作

最近在折騰VPS時發現,VPS中一般只設有root使用者,普通使用者得自己設定,一番折騰之後,寫下這篇部落格,權當筆記之用。 一、建立使用者 1、使用命令 useradd 例:useradd user1——建立使用者user1(該操作一般不會再/home目

Ubuntu安裝解除安裝軟體

在ubuntu當中,安裝應用程式我所知道的有三種方法,分別是apt-get,dpkg安裝deb兩種方法1、通過deb包安裝的情況:安裝.deb包:程式碼:1sudo dpkg -i package_file.deb反安裝.deb包:程式碼:1sudo dpkg -r pack

ubuntu編譯使用libxml2

下面是在網上找的一段測試linxml2庫是否裝上的程式碼。 #include <stdio.h>  #include <libxml/parser.h> #include <libxml/tree.h> int main(int argc, char **argv)

UbuntuEclipsePyDev搭建完美Python開發環境

最近在Oracle VM VirtualBox下安裝了Ubantu的系統,準備開發Python,作為程式媛妹子的我這個頭疼啊。對命令什麼的完全無感。邊查資料邊操作。趕緊把出現的問題記下。 1.Ctrl+Alt+T 進入終端 輸入python,顯示當前Python版本號,我的

ubuntu安裝使用wxwidgets庫

需要新安裝的包: libwxbase2.8-dev libwxgtk2.8-dev 附加include路徑: /usr/include/wx-2.8 /usr/lib/wx/include/gtk2-unicode-release-2.8 預定義巨集: __WX__ __

Ubuntu Thunderbird exchange 配置

Ubuntu 下使用 Thunderbird 做郵件客戶端,因為實在是找不到類似 Foxmail 一樣的軟體了。 幸好,Ubuntu 自帶這款軟體,但是用起來有個問題就是隻能接受郵件不能傳送郵件。