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