VIM使用(二) 瀏覽內核源代碼

爲了實現相似SourceInsight功能,經過VIM+Ctags+Cscope+Taglist+Source Explore +NERD Tree實現.css

 

一, 安裝插件html

1)安裝Ctags 和Cscopelinux

Ubuntu下能夠直接經過命令安裝:sql

sudo apt-get install ctags cscope

注:cscope與ctags功能相似,但能補充Ctags的不足,兩者結合便能兼具ctags的便利,雙能用cscope補充ctags的侷限,算得上是Linux內核代碼分析的強大工具.數據庫

 

2)安裝taglist :vim

經過向.vimrc中添加:函數

Bundle 'taglist.vim'
Bundle "scrooloose/nerdtree" 
Bundle "wesleyche/SrcExpl" 
Bundle "majutsushi/tagbar"

再執行:BundleInstall命令便可自動安裝.工具

3)post

二,配置和使用插件ui

在Linux內核已經自帶ctags和cscope的標籤數據庫的生成腳本,在內核源代碼目錄下經過命令可生成相應的數據庫文件:

make ctags
make cscope

注:前者,生成一個92M的tags文件,後者會生成cscope.files(分析文件的目錄)和其它文件數據庫.

配置ctags和cscope的數據庫與VIM聯動:

""" ctags database path """""""
set tags=/home/magc/workspace/linux-2.6.32.67/tags


""" cscope database path """""""
set csprg=/usr/bin/cscope    "whereis cscope
set csto=0            "cscope DB search first
set cst                "cscope db tag DB search
set nocsverb            "verbose off
"cs db path
cs add /home/magc/workspace/linux-2.6.32.67/cscope.out
set csverb            "verbos off

 

taglist插件配置:

""""""""tag list setting """"""""
filetype on
nmap <F7> :TlistToggle<CR>        "F7 Key = Tag list Toggling
let Tlist_Ctags_Cmd = "/usr/bin/ctags"    " whereis ctags
let Tlist_Inc_WinWidth = 0        "window width change off"
let Tlist_Exit_OnlyWindow = 0        
let Tlist_Auto_Open = 0            "VIM打開時
let Tlist_Use_Right_Window = 1

Source Explorer 插件配置:

""""""" Source Explorer Setting """"""


nmap <F4> :SrcExplToggle<CR>
 "control+h進入左邊的窗口
nmap <C-H> <C-W>h
 "control+j進入下邊的窗口
nmap <C-J> <C-W>j 
"control+k進入上邊的窗口
nmap <C-K> <C-W>k 
"control+l進入右邊的窗口
nmap <C-L> <C-W>l  

let g:Srcexpl_winHeight = 8

" // Set 100 ms for refreshing the Source Explorer 

let g:SrcExpl_refreshTime = 100

" // Set "Enter" key to jump into the exact definition context 

let g:SrcExpl_jumpKey = "<ENTER>"

" // Set "Space" key for back  the definition context 

let g:SrcExpl_gobackKey = "<SPACE>"
let g:SrcExpl_isUpdateTags = 0

NERD Tree插件配置:

""""" NERD Tree Setting """""""""

let NERDTreeWinPos="left"

nnoremap <F2> :NERDTreeToggle<CR>

 

注:上面設置中包含的快捷鍵有:

  • F7打開Taglist
  • F4打開Source Explorer
  • F2打開Nerd Tree
  • control+h進入左邊的窗口
  • control+k進入上邊的窗口
  • control+j進入下邊的窗口
  • control+l進入右邊的窗口

 

 

三,代碼瀏覽方法

相似SourceInsight的用法,只不過這裏有些窗口須要手動打開,經過F2,F4,F7打開如上圖的,先在左側的NERD文件樹中找到你要查看的文件,中間大窗口是源碼窗口,當光標在某變量或函數名上時,下面就會顯示它的定義,右側是當前文件的標籤(變量,函數名等)

注:這裏標籤的來源是cscope和ctags兩個數據庫,有關Cscope的詳細命令使用方法可參考:http://blog.csdn.net/dengxiayehu/article/details/6330200

 

有關Cscope在大工程中的使用要參考:Using Cscope on large projects (example: the Linux kernel)

 

附加1 Cscope搜索跳轉技巧:(參考:http://blog.chinaunix.net/uid-24774106-id-3556337.html)

咱們還有一個問題是敲 :cs find c closeAllVfds這太不人性了,函數名很長的狀況下,要人命。快捷鍵映射就很重要了。看下個人.vimrc裏面的快捷鍵映射。(關心.vimrc的筒子能夠CU的草根老師博客下載那個vimrc的安裝包,文章路徑在此: 配置本身的vim
nmap <leader>sa :cs add cscope.out<cr>
nmap <leader>ss :cs find s <C-R>=expand("")<cr><cr>
nmap <leader>sg :cs find g <C-R>=expand("")<cr><cr>
nmap <leader>sc :cs find c <C-R>=expand("")<cr><cr>
nmap <leader>st :cs find t <C-R>=expand("")<cr><cr>
nmap <leader>se :cs find e <C-R>=expand("")<cr><cr>
nmap <leader>sf :cs find f <C-R>=expand("")<cr><cr>
nmap <leader>si :cs find i <C-R>=expand("")<cr><cr>
nmap <leader>sd :cs find d <C-R>=expand("")<cr><cr>

 

    nmap表示在vim的普通模式下映射,固然相對與編輯模式和可視模式而言的,咱們很少說。
    =expand("cword")整體是爲了獲得:光標下的變量或函數。cword 表示:cursor word, 相似的還有:cfile表示光標所在處的文件名。
   這個鍵在個人vim中對應的是逗號, 因此,上面的意思就 只要光標在咱們關心的變量或者函數下,命令行模式敲,sc就至關與執行:cs find c 光標處函數名,注意,只需,sc三個鍵,不要敲冒號: 其餘的鍵的映射也是相似的。    
    有了這個快捷鍵,咱們使用cscope的效率就提高了,加上ctrl+],ctrl+o,ctrl+t 咱們看項目代碼基本就比較舒服了。
    有網友bottles在個人博文 vim格式化C代碼中問到:
  1. 這個插件在不一樣文件當中都能跳轉到定義嗎?還有某些文件我想直接輸入文件名不輸入路徑就open這個文件,這個功能用您說的插件能實現嗎?我以前就是由於不能跳轉到定義才用source insight裏去的。
    對於這個問題,答案是確定的,咱們只須要執行:cs find f filename,就能夠跳轉到名字爲filename的文件中去,注意不須要是全路徑名。好比我能夠從/usr/local/src/pgsrc/postgresql-9.2.3/src/backend/storage/file/fd.c文件中,在命令行模式下敲
  1. :cs find f bgwriter.c
就會跳轉到/usr/local/src/pgsrc/postgresql-9.2.3/src/backend/postmaster/bgwriter.c。儘管他們不在同一路徑下。

    對於頭文件的跳轉,好比fd.c中有以下頭文件:
  1. #include "miscadmin.h"
咱們只要將光標置於miscadmin.h處,執行快捷鍵,sf三個鍵,就能跳轉到miscadmin.h頭文件處。只須要三個鍵,跳轉的特別快。    個人博文vim格式化C代碼中,當時沒有考慮到makefile,由於makefile的tab鍵不能展開爲4個空格,此次一併在博文中修復了,對makefile作了特殊處理。    
相關文章
相關標籤/搜索