vim環境搭建:安裝vimgdb、使用ctags
1.安裝vimgdb
vim中無法使用gdb除錯,安裝vimgdb(vim的gdb補丁版),可以直接在vim中用gdb除錯,參考 vi/vim使用進階: 在VIM中使用GDB除錯 – 使用vimgdb
2.使用Vundle管理外掛
vim很多功能需要使用外掛,使用Vundle方便管理外掛
安裝Vundle:建立 目錄~/.vim/bundle,以後Vundle自動下載的外掛都儲存在這裡。然後,進入 Bundle 目錄,使用 git clone 命令:git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
下載Vundle,最後在~/.vimrc中新增如下配置:
1 #using vundle need filetype off, and set nocompatible
2 filetype off
3 set nocompatible
4 set rtp+=~/.vim/bundle/vundle
5 call vundle#rc()
6
7 Bundle 'gmarik/vundle'
8
9 "my bundles here
10 Bundle 'altercation/vim-colors-solarized'
11 Bundle 'taglist.vim'
12 Bundle 'The-NERD-TREE'
13 Bundle 'minibufexpl.vim'
14 Bundle 'OmniCppComplete'
15 " bundles end
vundle常用命令:
+ BundleInstall -安裝列表中全部外掛
+ BundleInstall! -更新列表中全部外掛
+ BundleClean -清除列表中沒有的外掛
+ BundleSearch foo -查詢foo外掛
+ BundleSearch -列出所有可用的外掛,可以在列表中搜索、安裝
+ BundleList -列舉出列表中(.vimrc中)配置的所有外掛
3.使用ctags
ctags可以對程式碼中的函式,全域性變數,巨集定義,結構體(類)建立關鍵字索引,以實現快速查詢。使用時,需要先在原始碼目錄下生成tags檔案,然後把tags檔案路徑加到vim的tags變數裡set tags=~/path/tags
[[email protected] src]$ ctags -R --c-kinds=+px --fields=+iaS --extra=+q *.c *.h
vim中執行,set tags=~/path/tags
或者寫在.vimrc檔案裡
另外,為了檢視系統函式需要生成系統函式的tags,命令如下:
ctags -I __THROW -I __attribute_pure__ -I __nonnull -I __attribute__ -I __attribute_malloc__ -I __wur --file-scope=yes --langmap=c:+.h --languages=c,c++ --links=yes --c-kinds=+p --c++-kinds=+p --f ields=+iaS --extra=+q -f ~/.vim/systags /usr/include/* /usr/include/sys/* /usr/include/bits/* /usr/include/netinet/* /usr/include/arpa/*
生成的tag檔案~/.vim/systags,然後新增到tag路徑
設定好tag後,就可以使用ctrl+]來跳轉了.
tags有一個小技巧,在vimrc檔案中set tags=tags; (注意有分號),在vi中使用定位快捷鍵時會先在當前目錄中查詢tags檔案,找不到的話,就會到父目錄中找,依次類推.
ctags常用快捷鍵和命令:
命令 | 用途 |
---|---|
ctrl+] | 跳轉到游標所在關鍵字的第一處標籤 |
g ctrl+] | 如果有多個標籤會列出來供選擇,如果只有一個,則直接跳轉 |
:tag {keyword} | 跳轉到keyword的第一處標籤 |
:tjump {keyword} | 如果有多個標籤會列出來供選擇,如果只有一個,則直接跳轉 |
:pop 或者只ctrl+t | 反向遍歷標籤位置 |
:tag | 正向遍歷標籤位置 |
:tnext | 跳到下一個匹配的標籤 |
:tprev | 跳到上一個匹配的標籤 |
:tfirst | 跳到第一個匹配的標籤 |
:tlast | 跳到最後一個匹配的標籤 |
:tselect | 列出標籤列表 |
4.外掛taglist
taglist用於顯示開啟的檔案中定義的全域性變數、巨集、函式命令,
常用命令:
- :TlistOpen 開啟taglist視窗
- :TlistClose 關閉taglist視窗
- :TlistToggle 在開啟和關閉間切換,可以定義快捷鍵,如
map <C-F12> :TlistToggle<cr>
taglist視窗中的快捷鍵:
- : 跳到游標下tag所定義的位置
+
開啟一個摺疊,同zo-
將tag摺疊起來,同zc*
開啟所有的摺疊,同zR=
將所有tag摺疊起來,同zM- o 在新視窗下開啟tag所在的位置
- 在視窗底部顯示游標下tag的原型定義
- [[跳到前一個檔案的tag處
- ]]跳到後一個檔案的tag處
在.vimrc中配置let Tlist_Use_Right_Window = 1可以使taglist視窗顯示在右側
5.外掛The-NERD-tree
- P 跳到根結點
- p 跳到父結點
- 展開或者合攏目錄、或者跳到當前檔案
- o 在已有視窗中開啟檔案、目錄或書籤,並跳到該視窗
- go 在已有視窗 中開啟檔案、目錄或書籤,但不跳到該視窗
- i split 一個新視窗開啟選中檔案,並跳到該視窗
- gi split 一個新視窗開啟選中檔案,但不跳到該視窗
- s vsplit 一個新視窗開啟選中檔案,並跳到該視窗
- gs vsplit 一個新 視窗開啟選中檔案,但不跳到該視窗
- x 合攏選中結點的父目錄
- X 合攏選中結點下的所有目錄
6.外掛mimibufferexplore
mimibufferexplore會在其視窗中顯示buf中的檔案列表,
.vimrc中的配置如下:
$HOME/.vimrc 中新增如下配置
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
命令:
+ :bn 開啟下一個buf
+ :bp 開啟前一個buf
+ :b n是數字,第n個buf
7.外掛OmniCppComplete
8.外掛supertab
9.使用cscope
ctags只能跳轉到函式的定義處,cscope可以查詢函式被呼叫的地方;
安裝.
如果沒有安裝cscope,需要先安裝,下載原始碼Cscope的主頁,三步安裝。生成索引資料庫
在要程式碼目錄下執行cscope -Rbq
,會生成三個檔案:cscope.out, cscope.in.out, cscope.po.out;cscope在生成資料庫時,在專案目錄中未找到的標頭檔案,會自動到/usr/include目錄中查詢。如果你想阻止它這樣做,使用”-k“選項。
cscope預設只解析C檔案(.c和.h)、lex檔案(.l)和yacc檔案(.y),如果需要為其它檔案生成索引,需要把所有需要解析的檔案新增到cscope.files中,當cscope發現在當前目錄中存在cscope.files時,就會為cscope.files中列出的所有檔案生成索引資料庫,注意cscope.files需要儲存檔案的完整路徑,防止在其它檔案路徑失效。
下表中列出了cscope的常用選項:
-R: 在生成索引檔案時,搜尋子目錄樹中的程式碼
-b: 只生成索引檔案,不進入cscope的介面
-q: 生成cscope.in.out和cscope.po.out檔案,加快cscope的索引速度
-k: 在生成索引檔案時,不搜尋/usr/include目錄
-i: 如果儲存檔案列表的檔名不是cscope.files時,需要加此選項告訴cscope到哪兒去找原始檔列表。可以使用”–“,表示由標準輸入獲得檔案列表。使用
首先在vim中新增資料庫cs add cscope.out
;
:cs show可以顯示cscope的連線的資料庫,:cs kill num斷開編號為num的連線;
查詢命令:
:cs find {querytype} {name}
其中,{querytype} 取如下值:
s —— 查詢這個C符號
g —— 查詢這個定義
d —— 查詢被這個函式呼叫的函式(們)
c —— 查詢呼叫這個函式的函式(們)
t —— 查詢這個字串
e —— 查詢這個egrep匹配模式
f —— 查詢這個檔案
i —— 查詢#include這個檔案的檔案(們)選項設定
- csprg(cscopecscopeprg)選項用於設定cscope程式的位置。
- cscopecscopequickfix設定是否使用quickfix視窗來顯示cscope的結果,
執行set cscopequickfix=s-,c-,d-,i-,t-,e-後,可以使用quickfix的Ctrl-n / Ctrl-P 跳轉到後一項和前一項紀錄,詳情請”:help cscopequickfix“; - cst(cscopecscopetag),如果你想vim同時搜尋tag檔案以及cscope資料庫;
- csto(cscopecscopetagorder)選項決定是先查詢tag檔案還是先查詢cscope資料庫。設定為0則先查詢cscope資料庫,設定為1先查詢tag檔案。我通常設定為1,因為在tag檔案中查詢到的結果,會把最佳匹配列在第一位。
可以在 .vimrc中增加如下設定:
" cscope setting
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
endif