Ubuntu 14.04 配置vim插件教程

Ubuntu 14.04 vim插件配置教程
(最終配置成適配C/C++語言編程的IDE)
注:本系統採用ubuntu-14.04.3-desktop-amd64.iso鏡像生成的虛擬機,以下步驟中的路徑位置可能會因爲你的系統版本不同需要做相應的修改,請務必注意!

一、安裝vim

        apt-get install vim

二、安裝vim基本插件

        sudo apt-get install vim vim-scripts vim-doc

三、創建配置文件 .vimrc,並編寫文件

    進入用戶文件夾(/home/user/)之後,用gedit新建一個名叫.vimrc的文件:
1    cd ~
2    gedit .vimrc
    將以下配置複製粘貼到 .vimrc 中
" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible

" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
syntax on " 語法高亮
endif
colorscheme ron " elflord ron peachpuff default 設置配色方案,vim自帶的配色方案保存在/usr/share/vim/vim72/colors目錄下

" detect file type
filetype on
filetype plugin on

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according to the detected filetype
filetype plugin indent on
endif

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.

"set ignorecase " 搜索模式裏忽略大小寫
"set smartcase " 如果搜索模式包含大寫字符,不使用 'ignorecase' 選項。只有在輸入搜索模式並且打開 'ignorecase' 選項時纔會使用。
set autowrite " 自動把內容寫回文件: 如果文件被修改過,在每個 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令時進行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令轉到別的文件時亦然。
set autoindent " 設置自動對齊(縮進):即每行的縮進值與上一行相等;使用 noautoindent 取消設置
"set smartindent " 智能對齊方式
set tabstop=4 " 設置製表符(tab鍵)的寬度
set softtabstop=4 " 設置軟製表符的寬度
set shiftwidth=4 " (自動) 縮進使用的4個空格
set cindent " 使用 C/C++ 語言的自動縮進方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "設置C/C++語言的具體縮進方式
"set backspace=2 " 設置退格鍵可用
set showmatch " 設置匹配模式,顯示匹配的括號
set linebreak " 整詞換行
set whichwrap=b,s,<,>,[,] " 光標從行首和行末時可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠標
set number " Enable line number "顯示行號
"set previewwindow " 標識預覽窗口
set history=50 " set command history to 50 "歷史記錄50條


"--狀態行設置--
set laststatus=2 " 總顯示最後一個窗口的狀態行;設爲1則窗口數多於一個的時候顯示最後一個窗口的狀態行;0不顯示最後一個窗口的狀態行
set ruler " 標尺,用於顯示光標位置的行號和列號,逗號分隔。每個窗口都有自己的標尺。如果窗口有狀態行,標尺在那裏顯示。否則,它顯示在屏幕的最後一行上。

"--命令行設置--
set showcmd " 命令行顯示輸入的命令
set showmode " 命令行顯示vim當前模式

"--find setting--
set incsearch " 輸入字符串就顯示匹配點
set hlsearch

四、ctags插件安裝與配置

    ctags可以建立源碼樹的標籤索引(標籤就是一個標識符被定義的地方,如函數定義),使程序員在編程時能迅速定位函數、變量、宏定義等位置去查看原形。比如選中 printf 函數之後 ctrl+] 就會跳到printf在Linux內核庫函數中的定義位置。
   1)安裝ctags:
        sudo apt-get install ctags

   2)建立索引:Linux內核庫函數往往存放在/usr/include/x86_64-linux-gnu路徑中這一點看具體系統版本而定,本系統是 ubuntu-14.04.3 ,因此你的路徑可能會不同,一定要注意!
       
        cd /usr/include/x86_64-linux-gnu  (這裏的路徑以我爲例)
        sudo ctags -R                  (這一步是在x86_64-linux-gnu 中創建tags索引文件

    3)向vim註冊索引文件tags的路徑
        vi ~/.vimrc
       用vi打開後在 .vimrc文件 的後面再追加下面的配置
       切記!  set tags+=/usr/include/x86_64-linux-gnu 後面的路徑一定要按照自己的Linux內核庫函數路徑填寫!!
"--ctags setting--
" 按下F5重新生成tag文件,並更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=/usr/include/x86_64-linux-gnu "剛剛生成tags的路徑,在ctags -R 生成tags文件後,不要將tags移動到別的目錄,否則ctrl+]時,會提示找不到源碼文件


    4)簡單舉例
        用vim在任意目錄寫一個Test.c文件,編寫內容如下:
#include "stdio.h"
    int main(void)
    {
                printf("Hello World!\n");
                return 0;
    }

        寫好後末行模式輸入w保存好(不要退出vim),按Esc回到指令模式,把光標停留在printf上
然後按 Ctrl+W + ],vim會自動跳到Linux系統函數printf()處,這時我們能查看printf()的原形
查看完了,按Ctrl+o(回到上一個標籤) 就回到原來的地方,如果能正常跳轉,那就成功了。

五、管理vim插件—vim-addons

        1) 安裝vim-addons:
          sudo apt-get install vim vim-scripts vim-doc

        2) 查看插件狀態:
          vim-addons status
          
        3) 創建插件安裝管理目錄:
cd /home/user
mkdir .vim
cd .vim
mkdir plugin
mkdir doc
以上步驟保證vim-addons能正常使用

六、vim自動補全插件—OmniCppComplete

        1)安裝OmniCppComplete
         vim-addons install omnicppcomplete

        2)配置OmniCppComplete
          vi /home/user/.vimrc
         在vim配置文件/home/user/.vimrc中加入如下的配置:


"-- omnicppcomplete setting --
" 按下F3自動補全代碼,注意該映射語句後不能有其他字符,包括tab;否則按下F3會自動補全一些亂碼
imap <F3> <C-X><C-O>
" 按下F2根據頭文件內關鍵字補全
imap <F2> <C-X><C-I>
set completeopt=menu,menuone " 關掉智能補全時的預覽窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
        
        3)配置OmniCppComplete
        首先,下載C++一份C++標準庫的源代碼
          sudo apt-get install build-essential

        然後,在/usr/include/c++下就可以找到標準庫的頭文件了
        cd /usr/include/c++
          sudo ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
          vi ~/.vimrc
        最後,在.vimrc中加入下面一句話:
set tags+=/usr/include/c++/tags
       上一步完成後
       cd ~
        vim test.c
       打開之前的那個test.c文件,在printf("Hello World")下一行中,輸入pri,然後按下Ctrl+X Ctrl+O,此時vim會彈出一個窗口,所有以pri開頭的候選函數都會出現在這個窗口中。

常用快捷鍵:
Ctrl+P  向前切換成員
Ctrl+N  向後切換成員
Ctrl+E  表示退出下拉窗口, 並退回到原來錄入的文字
Ctrl+Y  表示退出下拉窗口, 並接受當前選項
其他補全方式:
Ctrl+X Ctrl+L 整行補全
Ctrl+X Ctrl+N  根據當前文件裏關鍵字補全
Ctrl+X Ctrl+K  根據字典補全
Ctrl+X Ctrl+T  根據同義詞字典補全
Ctrl+X Ctrl+I  根據頭文件內關鍵字補全
Ctrl+X Ctrl+]  根據標籤補全
Ctrl+X Ctrl+F  補全文件名
Ctrl+X Ctrl+D  補全宏定義
Ctrl+X Ctrl+V  補全vim命令
Ctrl+X Ctrl+U  用戶自定義補全方式
Ctrl+X Ctrl+S  拼寫建議


七、函數原型提示echofunc

        1、首先你需要在你的火狐瀏覽器中輸入鏈接http://www.vim.org/scripts/download_script.php?src_id=17383 下載echofunc插件,
下載完成後,把echofunc.vim文件放到 /usr/.vim/plugin文件夾中。
        2、假如 echofunc.vim文件下載後在/home/user中,那麼移動文件的操作是:
        (一定要對應你自己的路徑)
       mv /home/user/echofunc.vim/home/user/.vim/plugin

        3、然後進入plugin目錄
          cd /home/user/.vim/plugin
          ctags -R --fields=+lS
          然後再編輯test.c,輸入printf( 就會出現下面的提示了。 


八、標籤瀏覽器Taglist

        Taglist用於列出了當前文件中的所有標籤(宏, 全局變量, 函數名等)
        安裝Taglist
        vim-addons install taglist
        配置Taglist
        在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:
"-- Taglist setting --
let Tlist_Ctags_Cmd='ctags' "因爲我們放在環境變量裏,所以可以直接執行
let Tlist_Use_Right_Window=0 "讓窗口顯示在右邊,0的話就是顯示在左邊
let Tlist_Show_One_File=0 "讓taglist可以同時展示多個文件的函數列表
let Tlist_File_Fold_Auto_Close=1 "非當前文件,函數列表摺疊隱藏
let Tlist_Exit_OnlyWindow=1 "當taglist是最後一個分割窗口時,自動推出vim
"是否一直處理tags.1:處理;0:不處理
let Tlist_Process_File_Always=1 "實時更新tags
let Tlist_Inc_Winwidth=0
        進入vim後用命令":Tlist"打開/關閉taglist窗口


九、文件瀏覽器和緩衝區管理器WinManager

        用WinManager來管理文件瀏覽器netrw和標籤瀏覽器Taglist。netrw是標準的vim插件, 已經隨vim一起安裝進系統裏了, 不需要我們自行下載安裝。
        1)安裝WinManager
        vim-addons install winmanager
        2)配置WinManager
        在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:
        
"-- WinManager setting --
let g:winManagerWindowLayout='FileExplorer|TagList' " 設置我們要管理的插件
"let g:persistentBehaviour=0 " 如果所有編輯文件都關閉了,退出vim
nmap wm :WMToggle<cr

        進入vim後用命令":WMToggle"打開/關閉WinManage窗口,也可以用快捷鍵按“wm”打開/關閉WinManage窗口。
常用命令:
:WMToggle 打開/關閉WinManage,不過我們在配置文件.vimrc中做了快捷鍵映射,所以直接按wm就可以打開/關閉WinManage
文件瀏覽器命令(在文件瀏覽器窗口中使用)
<enter>或雙擊  如果光標下是目錄, 則進入該目錄; 如果光標下文件, 則打開該文件
<tab>   如果光標下是目錄, 則進入該目錄; 如果光標下文件, 則在新窗口打開該文件
<F5> 刷新列表
-  返回上一層目錄
c  使瀏覽目錄成爲vim當前工作目錄
d  創建目錄
D  刪除當前光標下的目錄或文件
i  切換顯示方式
R  文件或目錄重命名
s  選擇排序方式
r  反向排序列表
x  定製瀏覽方式, 使用你指定的程序打開該文件
winmanager幫助文檔
:help winmanager
:help netrw    netrw幫助文檔


十、代碼摺疊fold

        在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:
"--fold setting--
set foldmethod=syntax " 用語法高亮來定義摺疊
set foldlevel=100 " 啓動vim時不要自動摺疊代碼
set foldcolumn=5 " 設置摺疊欄寬度


常用命令
za  打開/關閉在光標下的摺疊
zA  循環地打開/關閉光標下的摺疊
zo  打開 (open) 在光標下的摺疊
zO  循環打開 (Open) 光標下的摺疊
zc  關閉 (close) 在光標下的摺疊
zC  循環關閉 (Close) 在光標下的所有摺疊
zM  關閉所有摺疊
zR  打開所有的摺疊
幫助文檔
:help usr_28.txt
:help fold.txt


十一、quickfix命令集

        在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:

"-- QuickFix setting --
" 按下F6,執行make clean
map <F6> :make clean<CR><CR><CR>
" 按下F7,執行make編譯程序,並打開quickfix窗口,顯示編譯信息
map <F7> :make<CR><CR><CR> :copen<CR><CR>
" 按下F8,光標移到上一個錯誤所在的行
map <F8> :cp<CR>
" 按下F9,光標移到下一個錯誤所在的行
map <F9> :cn<CR>
" 以上的映射是使上面的快捷鍵在插入模式下也能用
imap <F6> <ESC>:make clean<CR><CR><CR>
imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>
imap <F8> <ESC>:cp<CR>
imap <F9> <ESC>:cn<CR>

常用命令:
:make {arguments}
如果編譯時出現錯誤,按 <Enter>,回到vim界面,看不到出錯信息了!這時,可以運行以下命令
:cw[indow]
打開quickfix窗口來查看出錯信息,它會自動跳到第一處出錯的地方。然後,你可以雙擊出錯某一條出錯信息,vim就會自動跳轉到相應的出錯位置
:cn[ext]  光標移到下一個錯誤所在的行
:cp[revious] 光標移到上一個錯誤所在的行
:cfirst  到第一處錯誤
:clast  到最後一處錯誤
:cc   空間不夠時,Vim 會縮短出錯信息。如果你想查看詳細信息,可以使用此命令
:cl[ist] 列出所有出錯信息的概覽(只有那些含有文件名或行數的錯誤信息會被顯示,需要查看那些並不含文件名或行數的信息可用“:cl[ist]!”命令)



十二、Cscope

        Cscope是一個類似於ctags的工具,不過其功能比ctags強大很多。

        安裝Cscope
        sudo apt-get install cscope

        在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:
"-- Cscope setting --
if has("cscope")
set csprg=/usr/bin/cscope " 指定用來執行cscope的命令
set csto=0 " 設置cstag命令查找次序:0先找cscope數據庫再找標籤文件;1先找標籤文件再找cscope數據庫
set cst " 同時搜索cscope數據庫和標籤文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口來顯示cscope查找結果
set nocsverb
if filereadable("cscope.out") " 若當前目錄下存在cscope數據庫,添加該數據庫到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否則只要環境變量CSCOPE_DB不爲空,則添加其指定的數據庫到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map <F4> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
imap <F4> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
" 將:cs find c等Cscope查找命令映射爲<C-_>c等快捷鍵(按法是先按Ctrl+Shift+-, 然後很快再按下c)
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>

主要用法:
cscope的主要功能是通過其"find"子命令來實現的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s  查找這個 C 符號(可以跳過註釋)
1 或 g  查找這個定義
2 或 d  查找這個函數調用的函數
3 或 c  查找調用過這個函數的函數
4 或 t  查找這個字符串
6 或 e  查找這個 egrep 模式
7 或 f  查找這個文件
8 或 i  查找包含這個文件的文件
用法:
<1>、爲源碼建立一個cscope數據庫
lingd@ubuntu:~/arm/linux-2.6.28.7$ cscope -Rbq
lingd@ubuntu:~/arm/linux-2.6.28.7$ ls cscope.*
cscope.in.out  cscope.out  cscope.po.out
<2>、用vim打開某個源碼文件,末行模式下,輸入“:cs add cscope.out"(該命令已被我們映射爲快捷鍵F4),添加cscope數據庫到vim。因爲我們已將vim配置爲啓動時,自動添加當前目錄下的cscope數據庫,所以你再添加該cscope數據庫時,vim會提示“重複cscope數據庫 未被加入“
<3>、完成前兩步後,現在就可以用“cs find c”等Cscope查找命令查找關鍵字了。我們已在.vimrc中將“cs find c”等Cscope查找命令映射爲<C-_>c等快捷鍵(按法是先按Ctrl+Shift+-, 然後很快按下c)
 
幫助文檔
:help if_cscop
注意:幫助文檔if_cscop中,快捷鍵映射nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>是有誤的!
比如光標“header.h”上按下<C-_>i,也就是查找包含“header.h“的文件。但是按照這個映射規則,則是將<C-_>i映射爲cs find i ^header.h$,也就是查找包含“^header.h$“的文件,這顯然不是我們想要的結果。該映射規則應該改成nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
十三、一鍵編譯C/C++文件

        在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:

map <F8> :w<CR>:call CompileRun()<CR>
map <F8><F8> :w<CR>:call Debug()<CR>
func CompileRun()
    exec "w"
    if &filetype == 'c'
        exec "!gcc % -g -o %<"
        exec "!.\/%<"
    elseif &filetype =='cpp'
        exec "!g++ % -g -o %<"
        exec "!.\/%<"
    elseif &filetype == 'python'
        exec "!python %"
    endif
endfunc
func Debug()
    exec "w"
    if &filetype == 'c'
        exec "!rm %<"
        exec "!gcc % -g -o %<"
        exec "!gdb %<"
    elseif &filetype == 'cpp'
        exec "!rm %<"
        exec "!g++ % -g -o %<"
        exec "!gdb %<"
        exec "!rm %<.class"
    elseif &filetype == 'java'
        exec "!javac %"
        exec "!jdb %<"
    elseif &filetype == 'python'
        exec "!pdb %"
    endif
endfunc
        然後在test.c中按F8編譯運行程序,雙擊F8爲調試程序,運行結果就是 hello world。

十四、配置括號自動添加

       在vim配置文件/home/user/.vimrc(隱藏了的,需要用cd和vim配合進入)中加入如下的配置:

:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(‘)’)<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair(‘}’)<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(‘]’)<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair(‘>’)<CR>
function ClosePair(char)
    if getline(‘.’)[col('.') - 1] == a:char
        return “\<Right>”
    else
        return a:char
    endif
endf


最後,vim常用的快捷鍵
vim常用快捷鍵
%  跳轉到配對的括號去
[[  跳轉到當前或者上一代碼塊(函數定義、類定義等)的開頭去(但要求代碼塊中'{'必須單獨佔一行)
][  跳轉到當前代碼塊(函數定義、類定義等)的結尾去(但要求代碼塊中'{'必須單獨佔一行)
]]  跳轉到下一代碼塊(函數定義、類定義等)的開頭去(但要求代碼塊中'{'必須單獨佔一行)
[/  跳到註釋開頭(只對/* */註釋有效)
]/ 跳到註釋結尾(只對/* */註釋有效)
gD  跳轉到當前文件內標識符首次出現的位置,可用於跳轉到全部變量的定義處;查找局部變量時,要是多個函數中定義了該局部變量,使用gD進行查找,找到的變量定義可能不是你需要的
gd 跳轉到當前函數內標識符首次出現的位置,可用於跳轉到局部變量的定義處
''  跳轉到光標上次停靠的地方, 是兩個', 而不是一個"
mx  設置書籤,x只能是a-z的26個字母
`x  跳轉到書籤處("`"是1左邊的鍵)
>  增加縮進,"x>"表示增加以下x行的縮進
<  減少縮進,"x<"表示減少以下x行的縮進

呼~結束
By  robotzzg(2hi9uo)
        
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章