天天看點

安裝Vundle和YouCompleteMe

一、Vundle

這是一個vim的插件管理器,可以增強vim的功能。

1、安裝

預設的是安裝在/.vim/bundle/vundle下

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
           

2、配置~/.vimrc檔案

"~"即為為使用者主目錄,可将以下内容直接儲存為.vimrc檔案,再覆寫~/.vimrc檔案。

"配置ycm,taglist,Synstics,The-Nerd-Tree完成之後
"vim下可以使用的快捷鍵有
"<F2> 目錄樹,nerd-tree為最後一個視窗,不關閉vim
"<F3> taglist,taglist為最後一個視窗,則關閉vim
"
"**********************************************************
"						一般性配置
"**********************************************************
"關閉vim一緻性原則
set nocompatible
"顯示行号
set nu
"設定在編輯過程中右下角顯示光标的行列資訊
set ruler
"設定曆史記錄條數
set history=1000
"設定c/c++方式自動對齊
set autoindent
set cindent
"開啟文法高亮功能
syntax on
"設定自動對齊空格數
set shiftwidth=4
"設定搜尋時忽略大小寫
set ignorecase
"選中高亮
set hls
"搜尋高亮
set hlsearch
"實時比對搜尋結果
set incsearch
"設定tabstop寬度
set ts=4
"指定配色方案為256色
set t_Co=256
"設定在vim中可以使用滑鼠
set mouse=a
"設定當檔案被改動時自動載入
set autoread
"檢測檔案類型
filetype on
"針對不同檔案采用不同的縮進方式
"filetype indent on
"允許插件
filetype plugin on
"啟用智能補全
"filetype plugin indent on

"highlight Function cterm=bold,underline ctermbg=red ctermfg=green
"highlight TabLine term=underline cterm=bold ctermfg=9 ctermbg=4
"highlight TabLineSel term=bold cterm=bold ctermbg=Red ctermfg=yellow
"highlight Pmenu ctermbg=darkred
"highlight PmenuSel ctermbg=red ctermfg=yellow
colorscheme desert
"let g:winManagerWindowLayout='FileExplorer|TagList|BufExplorer'
"let g:winManagerWidth=35

"*****************************************************************
"							vundle配置
"*****************************************************************
"設定包括vundle和初始化相關的runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

"讓vundle管理插件版本,必須
Plugin 'VundleVim/Vundle.vim'

" 以下範例用來支援不同格式的插件安裝.
" 請将安裝插件的指令放在vundle#begin和vundle#end之間.
" Github上的插件
" 格式為 Plugin '使用者名/插件倉庫名'
Plugin 'tpope/vim-fugitive'
" 來自 http://vim-scripts.org/vim/scripts.html 的插件
" Plugin '插件名稱' 實際上是 Plugin 'vim-scripts/插件倉庫名' 隻是此處的使用者名可以省略
Plugin 'L9'
" 由Git支援但不再github上的插件倉庫 Plugin 'git clone 後面的位址'
"Plugin 'git://git.wincent.com/command-t.git'
" 本地的Git倉庫(例如自己的插件) Plugin 'file:///+本地插件倉庫絕對路徑'
"Plugin 'file:///home/gmarik/path/to/plugin'
" 插件在倉庫的子目錄中.
" 正确指定路徑用以設定runtimepath. 以下範例插件在sparkup/vim目錄下
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" 安裝L9,如果已經安裝過這個插件,可利用以下格式避免命名沖突
"Plugin 'ascenator/L9', {'name': 'newL9'}

"我添加的插件
Plugin 'Valloric/YouCompleteMe'
Plugin 'taglist.vim'
Plugin 'The-NERD-tree'
Plugin 'Syntastic'
Plugin 'Lokaltog/vim-powerline'

" 你的所有插件需要在下面這行之前
call vundle#end()            " 必須
filetype plugin indent on    " 必須 加載vim自帶和插件相應的文法和檔案類型相關腳本
" 忽視插件改變縮進,可以使用以下替代:
"filetype plugin on
"
" 常用的指令
" :PluginList       - 列出所有已配置的插件
" :PluginInstall     - 安裝插件,追加 `!` 用以更新或使用 :PluginUpdate
" :PluginSearch foo - 搜尋 foo ; 追加 `!` 清除本地緩存
" :PluginClean      - 清除未使用插件,需要确認; 追加 `!` 自動準許移除未使用插件
" 查閱 :h vundle 擷取更多細節和wiki以及FAQ


"*****************************************************************
"							YCM配置
"*****************************************************************
" YouCompleteMe
set completeopt=longest,menu	"讓Vim的補全菜單行為與一般IDE一緻(參考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif	"離開插入模式後自動關閉預覽視窗
inoremap <expr> <CR>       pumvisible() ? "\<C-y>" : "\<CR>"	"回車即選中目前項
"上下左右鍵的行為 會顯示其他資訊
inoremap <expr> <Down>     pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up>       pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp>   pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"

"youcompleteme  預設tab  s-tab 和自動補全沖突
"let g:ycm_key_list_select_completion=['<c-n>']
let g:ycm_key_list_select_completion = ['<Down>']
"let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_key_list_previous_completion = ['<Up>']
let g:ycm_confirm_extra_conf=0 "關閉加載.ycm_extra_conf.py提示

let g:ycm_collect_identifiers_from_tags_files=1	" 開啟 YCM 基于标簽引擎
let g:ycm_min_num_of_chars_for_completion=2	" 從第2個鍵入字元就開始羅列比對項
let g:ycm_cache_omnifunc=0	" 禁止緩存比對項,每次都重新生成比對項
let g:ycm_seed_identifiers_with_syntax=1	" 文法關鍵字補全
"nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>	"force recomile with syntastic
"nnoremap <leader>lo :lopen<CR>	"open locationlist
"nnoremap <leader>lc :lclose<CR>	"close locationlist
inoremap <leader><leader> <C-x><C-o>
"在注釋輸入中也能補全
let g:ycm_complete_in_comments = 1
"在字元串輸入中也能補全
let g:ycm_complete_in_strings = 1
"注釋和字元串中的文字也會被收入補全
let g:ycm_collect_identifiers_from_comments_and_strings = 1

nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳轉到定義處


let g:syntastic_ignore_files=[".*\.py$"]
let g:ycm_show_diagnostics_ui = 0                           " 禁用文法檢查
"leader映射為逗号","
"let mapleader = ","
"g:ycm_global_ycm_extra_conf 定義了全局配置檔案,當YCM搜尋不到配置檔案時
"YCM将導入全局配置檔案
let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'

"********************************************************
"                      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
"讓syntastic支援c++11
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

"*****************************************************************
"							taglist配置
"*****************************************************************
"不顯示 "press F1 to disply help"
"let Tlist_Compact_Format = 1
"視窗在右側顯示
"let Tlist_Use_Right_Window = 1
"隻顯示目前檔案的tags
let Tlist_Show_One_File = 1
"當同時顯示多個檔案的tag時,使taglist隻顯示目前檔案tag,其它檔案的tag都被折"
"疊起來
"let Tlist_File_Fold_Auto_Close = 1
"使taglist以tag名字進行排序
let Tlist_Sort_Type = "name"
"高亮顯示
let Tlist_Auto_Highlight_tag = 1
"随檔案自動更新
let Tlist_Auto_Updata = 1
"自動打開taglist視窗
"let Tlist_Auto_Open = 1
"設定寬度
let Tlist_WinWidth = 30
"設定高度
"let Tlist_WinHeight = 100
"taglist視窗是最後一個視窗,則退出vim
let Tlist_Exit_OnlyWindow = 1
"單擊跳轉
let Tlist_Use_SingClick = 1
"設定ctags指令的位置
"let Tlist_Ctags_Cmd = "/usr/bin/ctags"
"打開關閉taglist視窗快捷鍵
nnoremap <silent><F3> :TlistToggle<CR>
"在使用:TlistToggle打開taglist視窗時,光标在taglist視窗
let Tlist_GainFocus_On_ToggleOpen = 1


"********************************************************
"                      NERD_Tree 配置                   
"********************************************************
"顯示增強
let NERDChristmasTree=1
"自動調整焦點
let NERDTreeAutoCenter=1
"滑鼠模式:目錄單擊,檔案輕按兩下
let NERDTreeMouseMode=2
"打開檔案後自動關閉
"let NERDTreeQuitOnOpen=0
"顯示檔案
let NERDTreeShowFiles=1
"顯示隐藏檔案
let NERDTreeShowHidden=1
"高亮顯示目前檔案或目錄
let NERDTreeHightCursorline=1
"顯示行号
"let NERDTreeShowLineNumbers=1
"視窗位置
let NERDTreeWinPos='left'
"視窗寬度
let NERDTreeWinSize=31
"不顯示'Bookmarks' label 'Press ? for help'
"let NERDTreeMinimalUI=1
"快捷鍵
nnoremap <silent> <F2> :NERDTreeToggle<CR>
"當打開vim且沒有檔案時自動打開NERDTree
autocmd vimenter * if !argc() | NERDTree | endif
"隻剩 NERDTree時自動關閉
"autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif



"********************************************************
"						c,c++ 按<F5>編譯運作                  
"********************************************************
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
	exec "w"
	if &filetype == 'c'
		exec "!gcc % -o %<"
		exec "! ./%<"
	elseif &filetype == 'cpp'
		exec "!g++ % -o %<"
		exec "! ./%<"
	elseif &filetype == 'java'
		exec "!javac %"
		exec "!java %<"
	elseif &filetype == 'sh'
		:!./%<
	endif
endfunc

"********************************************************
"						c,c++ 按<F8>調試                  
"********************************************************
map <F8> :call Rungdb()<CR>
func! Rungdb()
	exec "w"
	exec "!gcc % -g -o %<"
	exec "!gdb ./%<"
endfunc

"********************************************************
"						鍵盤指令                  
"********************************************************
"映射全選+複制 ctrl+a
map <C-A> ggVGY
map! <C-A> <Esc>ggVGY


"********************************************************
"						新檔案标題                  
"********************************************************
"建立.c,.h,.sh,自動插入檔案頭
autocmd BufNewFile *.[ch],*.cpp,*.sh exec ":call SetTitle()"
func SetTitle()
	if &filetype == 'sh'
		call setline(1,"\#!/bin/bash")
		call append(line("."), "")
	else
		call setline(1,"/**********************************************")
		call append(line("."),   "  > File Name		: ".expand("%"))
		call append(line(".")+1, "  > Author			: dasg")
		call append(line(".")+2, "  > Mail			: [email protected]")
		call append(line(".")+3, "  > Created Time	: ".strftime("%c"))
		call append(line(".")+4, " ****************************************/")
		call append(line(".")+5, "")
	endif
	if expand("%:e") == 'cpp'
		call append(line(".")+6, "#include <iostream>")
		call append(line(".")+7, "using namespace std;")	
		call append(line(".")+8, "")
	endif
	if &filetype == 'c'
		call append(line(".")+6, "#include <stdio.h>")
		call append(line(".")+7, "")
	endif
	if expand("%:e") == 'h'
		call append(line(".")+6, "#ifndef _".toupper(expand("%:r"))."_H")
		call append(line(".")+7, "#define _".toupper(expand("%:r"))."_H")
		call append(line(".")+8, "")
	endif
endfunc
"建立檔案後,自動定位到檔案末尾
autocmd BufNewFile * normal G
		
"支援中文GB2312編碼
let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936
           

3、進入vim安裝插件

$ vim
           

不用管報錯(沒有監測到配置檔案中配置的插件),Enter繼續。輸入

:PluginInstall
           

安裝插件,由于是線上安裝,必須保證電腦能正常上網。

下載下傳安裝YouCompleteMe插件的時間會比較長(取決于網速,我安裝用了45分鐘)。

下載下傳完成後,使用vim打開檔案時,F2快捷鍵打開目錄樹,F3打開taglist。

4、如果想移除不需要的插件

1.編輯.vimrc檔案,移除你要移除的插件所對應的Plugin那一行

2.儲存退出

3.重新打開vim,輸入指令BundleClean

5、其它常用指令

1.更新插件 BundleUpdate

2.列出所有插件 BundleList

3.查找插件 BundleSearch

二、YouCompleteMe

https://github.com/Valloric/YouCompleteMe#full-installation-guide

這是一個自動補全插件,非常好用。在Vundle安裝YouCompleteMe之後,還不能正常使用,還需要以下步驟。

1、下載下傳必要的軟體包

$ sudo apt-get install build-essential cmake3
$ sudo apt-get install python-dev python3-dev
           

2、安裝clang

$ cd ~/.vim/bundle/YouCompleteMe
$ ./install.py --clang-completer
           

時間較長,視網速而定。

注意:如果後期在Vundle中更新了YouCompleteMe,需要重新執行安裝clang的步驟,才能正常使用。

3、 複制一個配置檔案模闆到使用者主目錄下

$ cp third_party/ycmd/examples/.ycm_extra_conf.py ~/
$ cd ~/
$ vim .ycm_extra_conf.py
           

~/.vimrc已經将預設的全局配置檔案設定為了~/.ycm_extra_conf.py,這個全局配置将在vim打開的工程目錄找不到.ycm_extra_conf.py時,生效。一般建議在各個工程下面放一個配置檔案,效果更好。要支援c,一般的修改為:

'-std=gunc99',
'-x',
'c',
'-isystem',
'/usr/include/',
'-isystem',
'/home/chunli/work/01_第三方共享庫頭檔案路徑/',
'-isystem',
'/home/chunli/work/01_chunli/08_本項目頭檔案路徑/',
           

三、安裝vim8.0

YCM插件需要的vim版本至少是7.4.1578,Ubuntu14的軟體源提供的是7.4.52,可以選擇下載下傳vim源碼編譯安裝,https://github.com/Valloric/YouCompleteMe/wiki/Building-Vim-from-source。

這裡提供一種比較簡單的方法:

1、安裝

$ sudo add-apt-repository ppa:jonathonf/vim
$ sudo apt-get update
$ sudo apt-get install vim
$ vim --version
           

2、如果解除安裝的話

$ sudo apt remove vim
$ sudo add-apt-repository --remove ppa:jonathonf/vim
           

四、taglist的使用

1、需要先安裝exuberant-ctags。

$ sudo apt-get install exuberant-ctags
           

2、建立标簽檔案

在自己的項目檔案夾下執行如下指令 。

$ ctags -R *
           

注:“-R”表示遞歸建立,也就包括源代碼根目錄(目前目錄)下的所有子目錄。“*”表示所有檔案。這條指令會在目前目錄下産生一個“tags”檔案, 當使用者在目前目錄中運作vi時,會自動載入此tags檔案。

然後就可以入手了。

3、使用

熟練的使用ctags僅需記住下面七條指令:

1.

$ ctags –R * 
           

2.把tag替換為您欲查找的變量或函數名

$ vi –t tag       
           

3.ts 助記字:tags list, “:”開頭的指令為VI中指令行模式指令。:ts指令顯示的tag清單,是上一次被檢索過的tag。

:ts                                
           

4.tp助記字:tags preview

:tp
           

5.tn助記字:tags next

:tn
           

6. Ctrl + ] (光标處于要查找的函數處,進入)

7. Ctrl + T 或 Ctrl + O (原路後退)

詳細舉例如下:

“vi–t tag”:在運作vim的時候加上“−t”參數,例如:[/usr/src] vim -t main

這個指令将打開定義“main”(變量或函數或其它)的檔案,并把光标定位到這一行。如果這個變量或函數有多處定義,在VI指令行模式“:ts”指令就能 列出一個清單供使用者選擇。 “:tp”為上一個tag标記檔案,“:tn”為下一個tag标記檔案。當然,若目前tags檔案中使用者所查找的變量或函數名隻有一 個,“:tp,:tn”指令不可用。

最友善的方法是把光标移到變量名或函數名上,然後按下“Ctrl+]”,這樣就能直接跳到這個變量或函數定義的源檔案中,并把光标定位到這一行。用 “Ctrl+t”或“Ctrl+o”可以退回原來的地方。即使使用者使用了N次“Ctrl+]”查找了N個變量,按N次“Ctrl+t”也能回到最初打開的檔案,它會按原路傳回 。

4、注意

運作vim的時候,必須在“tags”檔案所在的目錄下運作。否則,運作vim的時候還要用“:settags=”指令設定“tags”檔案的路 徑,這樣vim才能找到“tags”檔案。在完成編碼時,可以手工删掉tags檔案。

繼續閱讀