1. 程式人生 > >vim IDE配置

vim IDE配置

環境: CentOS 6.7,  vim版本為7.4

一:配色

採用molokai  https://github.com/tomasr/molokai

下載以後將colors/molokai.vim拷貝至~/.vim/colors

設定~/.vimrc (雙引號開頭為註釋行)

"set colorscheme
colorscheme  molokai
set t_Co=256
set background=light(暗色調可以設定為dark)

二:NERDTree

https://github.com/scrooloose/nerdtree 下載nerdtree-4.0.0.zip,解壓後將doc/NERD_tree.txt拷貝至~/.vim/doc

將nerdtree_plugin/下的exec_menuitem.vim 和fs_menu.vim以及plugin/下的NERD_tree.vim拷貝至~/.vim/plugin

設定快捷鍵:

修改~/.vimrc,使用F2作為顯示和隱藏的快捷鍵。

"set NERDTree

map <F2> :NERDTreeMirror<CR>
map <F2> :NERDTreeToggle<CR>

在vim中執行:NERDTree或者按F2可以開啟左側導航樹。

其他快捷鍵:

NERDTree快捷鍵:

ctrl +w +w    游標自動在左右側視窗切換
ctrl +w +r    移動當前視窗的佈局位置
o  展開左側某個目錄,再按一下就是合併目錄
O  遞迴開啟選中 結點下的所有目錄
x  合攏選中結點的父目錄
X  遞迴 合攏選中結點下的所有目錄
go  在已有視窗中開啟檔案,但游標不跳到該視窗
t  中開啟選中檔案,並跳到新視窗
T  開啟選中檔案, 在原視窗
P  跳到上級目錄結點
p  跳到根目錄結點
q  關閉 NerdTree 視窗
i  開啟選中檔案,上下分屏並跳到該視窗
gi  開啟選中檔案,上下分屏, 不跳到該視窗
s  開啟選中檔案,左右分屏並跳到該視窗

gs  開啟選中檔案,左右分屏,不跳到該視窗

三:ctags

執行yum install ctags進行安裝

在原始碼工程目錄下執行 ctags -R ,遞迴的為當前目錄及子目錄下的所有程式碼檔案生成tags檔案為了在各級原始碼目錄可以識別tags, 設定~/.vimrc如下:

"set ctags
set tags=./tags;,tags;

常用命令:

用vim開啟原始碼檔案,把游標移到變數名或函式名上,然後按下“Ctrl+]”,這樣就能直接跳到這個變數或函式定義的原始檔中,並把游標定位到這一行(或者不移動游標,vim下使用命令:ta 變數/函式名 也能達到同樣效果)。用“Ctrl+t”可以退回原來的地方。即使使用者使用了N次“Ctrl+]”查找了N個變數,按N次“Ctrl+t”也能回到最初開啟的檔案,它會按原路返回 。

一些常用組合鍵:
"ctrl + t"退回到原來的地方
"[{"轉到上一級的"{"
"]}"轉到下級的"{"
"{"轉到上一個空行
"}"轉到下一個空行
"gd"轉到當前游標所指的區域性變數的定義

其他更詳細的ctags用法,vim中使用
:help tags


四:cscope

執行yum install cscope

在工程目錄下執行:

find /XXXX -name "*.[ch]" -o -name "*.cpp" > cscope.files

cscope -Rbkq -i cscope.files

R 表示把所有子目錄裡的檔案也建立索引
b 表示cscope不啟動自帶的使用者介面,而僅僅建立符號資料庫
q生成cscope.in.out和cscope.po.out檔案,加快cscope的索引速度
k: it will not look in/usr/include for any header files that are #included in your source files (this is mainly useful when you are using Cscope with operating system and/or C library source code, as we are here).

cscope -d可以獨立執行cscope搜尋

使用tab鍵進行搜尋結果和搜尋選單介面的切換。進入某個搜尋結果會進入原始碼,進行下次搜尋需要先退出當前原始碼,然後tab鍵到搜尋選單繼續搜尋。

如果想在執行cscope時預設開啟vim編輯器,可以設定~/.bashrc

export CSCOPE_EDITOR=vim

這樣預設開啟vim,就可以使用vim的各種外掛了。

如果想設定csope命令的別名,比如用c命令啟動cscope,那麼可以設定~/.bashrc

alias c='cscope'

如果想不退出當前原始碼繼續搜尋需要結合vim外掛,csope配置在vim中執行:

下載http://cscope.sourceforge.net/cscope_maps.vim, 將其放在~/.vim/plugin/下面

進行級聯搜尋時,CTRL-t可以返回本次搜尋之前的程式碼位置。

以下是一些快捷鍵,vim中執行:cscope find (或者cs f)+下面按鍵,例如執行:cs f g xxx可以檢視xxx的定義。也可以結合ctags使用快捷鍵,例如將游標移動到函式或者變數型別,可以使用CTRL-\ + g檢視定義。

""""""""""""" My cscope/vim key mappings
    "
    " The following maps all invoke one of the following cscope search types:
    "
    "   's'   symbol: find all references to the token under cursor
    "   'g'   global: find global definition(s) of the token under cursor
    "   'c'   calls:  find all calls to the function name under cursor
    "   't'   text:   find all instances of the text under cursor
    "   'e'   egrep:  egrep search for the word under cursor
    "   'f'   file:   open the filename under cursor
    "   'i'   includes: find files that include the filename under cursor
    "   'd'   called: find functions that function under cursor calls

" To do the first type of search, hit 'CTRL-\', followed by one of the
    " cscope search types above (s,g,c,t,e,f,i,d).  The result of your cscope
    " search will be displayed in the current window.  You can use CTRL-T to
    " go back to where you were before the search.  
    "

    nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
    nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
    nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
    nmap <C-\>e :cs find e <C-R>=expand("<cword>")<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>
    nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>

cscope常見問題:

1)E568: duplicate cscope database not added

當前vim版本可能已經支援cscope,並在它的配置檔案中開啟了cscope功能,這樣就與cscope_maps.vim有了衝突。例如

$ vi /etc/vimrc

if has("cscope") && filereadable("/usr/bin/cscope")
   set csprg=/usr/bin/cscope
   set csto=0
   set cst
   set nocsverb
   " add any database in current directory
   if filereadable("cscope.out")
      cs add $PWD/cscope.out
   " else add database pointed to by environment
   elseif $CSCOPE_DB != ""
      cs add $CSCOPE_DB
   endif
   set csverb
endif


可以將cscope_maps.vim中的相關配置註釋掉。

$ vi ~/.vim/plugin/cscope_maps.vim

" add any cscope database in current directory
    if filereadable("cscope.out")
        cs add cscope.out  
    " else add the database pointed to by environment variable
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif

使用雙引號開頭註釋掉就可以了。


2) E567: no cscope connections

根據提示表示沒有新增資料庫(cscope.out),需要指定該檔案。當一個工程包含子目錄的時候,我們一般是在頂層目錄使用cscope -Rb建立資料庫的,在子目錄下vim開啟一個檔案便會出現E567問題。所以設定一下環境變數即可。

在~/.bash_profile中寫入:

$export CSCOPE_DB=/yourproject/cscope.out,然後source ~/.bash_profile使其生效。


五:taglist

從http://vim-taglist.sourceforge.net/download.html 下載taglist_46.zip,解壓以後將檔案放至~/.vim/下相應目錄plugin和doc

配置~/.vimrc如下:

map <F3> :TlistToggle<CR>           "使用F3切換開啟或關閉Taglist
let Tlist_Show_One_File=1                "只顯示當前檔案的taglist,預設是顯示多個
let Tlist_Exit_OnlyWindow=1              "如果taglist是最後一個視窗,則退出vim
let Tlist_Use_Right_Window = 1        "在右側視窗中顯示taglist,各個視窗可以通過CTRL+W+W進行切換

let Tlist_WinWidth = 45                    "設定顯示寬度

常見問題:

1)同時顯示NERDTree和taglist的時候,taglist不顯示

將游標通過CTRL+W+W定位到中間的程式碼視窗,右側即可顯示taglist