使用 vim + ctags + cscope + taglist 閱讀源碼

        最近,準備跟學長一塊兒往 linux kernel 的門裏瞧瞧裏面的世界,雖然咱們知道門就在那,但咱們還得找到合適的角度纔會看得更舒服,對吧^_^ 。php

       閱讀源碼的工具備不少,並且現在的集成開發環境(IDE)也很強大,但對於常用vim編輯器的程序員來講,對vim的強大絕對是「不拋棄,不放棄」的,何況咱們只要安裝一些插件配合vim的工做同樣能達到IDE的效果,好了,廢話少說。瀏覽了不少有關的網頁資源後,發現有不少插件能夠用,但在此推薦3款比較經常使用的「小」插件供你們參考,它們其實並不「小」,很是強大!通常地,只是單個小程序源碼的閱讀就沒必要勞駕插件了(我是這樣認爲的),對於工程代碼不用它們就有點困難了。linux

這三個插件分別是:ctags , cscope , taglist       程序員

先看看效果如何吧  
web

效果如何


在ubuntu下的安裝與配置以下——

(1) ctags 插件

a)   功能:對瀏覽代碼很是的方便, 能夠在函數, 變量之間跳來跳去等等等等 (更多說明請百度或谷歌一下)
b)      安裝配置:
 終端下輸入  sudo apt-get install ctags      
若是沒發現該軟件包就用     sudo apt-get install exuberant-ctags  就好了……
若是還不行能夠到官網下載源碼手動編譯安裝,有點麻煩是否是?不要嫌麻煩,這也是一個學習的機會,若是遇到其餘相似的你也能夠仿照這裏的例子,再配合壓縮包裏的README文件就能手動安裝了,你說是否是,呵呵。
下載解壓後
 $ cd ctags-5.8
$ ./configure
 $ make
 # make install   // 須要root權限
使用 ctags --hlep   命令簡單測試一下安裝成功了沒  >^_^<

c)  使用方法:
      而後去你的源碼目錄, 若是你的源碼是多層的目錄, 就去最上層的目錄, 在該目錄下
     運行命令: ctags -R         其中-R表示遞歸遍歷
     我如今以  linux-kernel 的源碼目錄作演示
     $ cd  ~/ linux-kernel
     $ ctags -R      (若是是kernel源碼的話還能夠用  make tags)
     此時在/home/ linux-kernel/目錄下會生成一個 tags 文件, 如今用vim打開
    即輸入vim 而後Shift + : 
    而後再在vim末行運行命令,
     : set tags=/home/bob/linux-kernel/tags     (最前面的:是提示符,沒必要輸入)
     每次都要輸入這個才能使tags生效,我很懶,因此把該命令加入到~/.vimrc中, 你也能夠將這句話放到~/.vimrc中去, 
     若是你常常在這個      工程目錄編程的話.
    再若是你常常在不一樣工程間編程, 能夠在.vimrc中加上:
          set tags=tags;    "   其中 ; 不能沒有
         set autochdir
d)   使用舉例:
      把光標定位到某一函數名上或者宏上, 按下 Ctrl + ], vim就能夠自動切換到該函數定義處!
      要返回只須要按下Ctrl + o  或者 Ctrl + t.       是否是很方便吖。

(2)    cscope  插件

a) 功能:能夠對函數以及部分類型定義進行跳轉(更多說明請百度或谷歌一下)
b) 安裝配置:
sudo apt-get install cscope
這個源裏應該有了,若是沒有請到其官網  http://sourceforge.net/projects/cscope/files/   下載源碼安裝,具體安裝方法和  ctags  同樣的,我就不羅嗦啦!

d)使用舉例:
在終端下,轉到你源碼的所在目錄而後
$cscope -Rbkq  <回車>
說明一下參數:
        R 表示把全部子目錄裏的文件也創建索引
   b 表示cscope不啓動自帶的用戶界面,而僅僅創建符號數據庫
      q 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
   k 在生成索引文件時,不搜索/usr/include目錄
以後會在當前目錄生成幾個文件,  cscope.in.out和cscope.po.out文件,cscope.out
vim的normal模式下輸入
:cs add cscope.out
不會吧,每次都要輸入這些命令,煩死人了,有沒有捷徑呢?想偷懶總有人找到方法的,
sudo gedit  ~/.vimrc     ;而後在該文件下添加以下代碼: 
if filereadable("cscope.out") 
    cs add cscope.out 
endif 

這樣每次打開vim就能夠直接使用cscope了。 
再試試把下面的內容複製到~/.vimrc裏,這樣就能夠利用相應的快捷鍵進行不一樣的查找了.
if has("cscope")
            set cscopetag   " 使支持用 Ctrl+]  和 Ctrl+t 快捷鍵在代碼間跳來跳去
            " check cscope for definition of a symbol before checking ctags:
            " set to 1 if you want the reverse search order.
             set csto=1

             " 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

             " show msg when any other cscope db added
             set cscopeverbose

             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>
         endif

附經常使用的命令:
      :cs find s ---- 查找C語言符號,即查找函數名、宏、枚舉值等出現的地方
  :cs find g ---- 查找函數、宏、枚舉等定義的位置,相似ctags所提供的功能
  :cs find d ---- 查找本函數調用的函數:cs find c ---- 查找調用本函數的函數
  :cs find t: ---- 查找指定的字符串
  :cs find e ---- 查找egrep模式,至關於egrep功能,但查找速度快多了
  :cs find f ---- 查找並打開文件,相似vim的find功能
  :cs find i ---- 查找包含本文件的文
Ctrl+]將跳到光標所在變量或函數的定義處 Ctrl+T返回
更多幫助在vim末行命令模式下輸入cs 或 cscope得到幫助信息。
更多的例子以下
     首先進入源碼目錄, 在linux終端中輸入如下命令以建立cscope數據庫:
        $ find ~/work/..Project/ -name "*.h" -o -name "*.cpp" > cscope.files
        $ cscope -bkq -i cscope.files
     若是是在windows環境中, 則換成以下命令:
        dir /s /b *.cpp *.h > cscope.files
         cscope -b -q -k -i cscope.files

     而後, 用vim打開一個源文件(如: vim main.cpp),
     打開後, 第一件事就是導入cscope數據庫了:
         :cs add /home/yourname/workpace/cscope.out /home/yourname/workpace

     cscope數據庫導入成功後, 就能夠利用上面定義的快捷鍵進行相關的查找,

(3)    taglist  插件

a) 功能:  高效地瀏覽源碼, 其功能就像vc中的workpace, 那裏面列出了當前文件中的全部宏等等。
b) 安裝就不須要了,簡單配置一下就好了,但須要ctags的支持,
下載後,解壓縮后里面有兩個目錄 plugin和doc ,而後分別把plugin/taglist.vim複製到~/.vim/plugin目錄下, 
把doc/taglist.txt複製到~/.vim/doc目錄下,ok!
記得把下面的加入到~/.vimrc 中哦
" 按F8按鈕,在窗口的左側出現taglist的窗口,像vc的左側的workpace
nnoremap <silent> <F8> :TlistToggle<CR><CR>
" :Tlist              調用TagList
let Tlist_Show_One_File=0                    " 只顯示當前文件的tags
let Tlist_Exit_OnlyWindow=1                  " 若是Taglist窗口是最後一個窗口則退出Vim
let Tlist_Use_Right_Window=1                 " 在右側窗口中顯示
let Tlist_File_Fold_Auto_Close=1             " 自動摺疊

d) 使用舉例:這個就不用多說了,本身按F8試試就知道了,直接用鼠標就能操做。

   在taglist窗口中,還可使用下面的快捷鍵:數據庫

<CR>          跳到光標下tag所定義的位置,用鼠標雙擊此tag功能也同樣
o             在一個新打開的窗口中顯示光標下tag
<Space>       顯示光標下tag的原型定義
u             更新taglist窗口中的tag
s             更改排序方式,在按名字排序和按出現順序排序間切換
x             taglist窗口放大和縮小,方便查看較長的tag
+             打開一個摺疊,同zo
-             將tag摺疊起來,同zc
*             打開全部的摺疊,同zR
=             將全部tag摺疊起來,同zM
[[            跳到前一個文件
]]            跳到後一個文件
q             關閉taglist窗口
<F1>          顯示幫助
能夠用「:TlistOpen」打開taglist窗口,用「:TlistClose」關閉taglist窗口。或者使用「:TlistToggle」在打開和關閉間切換。在個人vimrc中定義了下面的映射,使用「,tl」鍵就能夠打開/關閉taglist窗口:編程


map <silent> <leader>tl :TlistToogle<cr>
使用 vim + ctags + cscope + taglist閱讀源碼 - 博 - huang博cai的博客 終於大功告成了,我也歇會兒啦  :-) 
<<++++++++++++++++++++++++++++++++^^^^^++++++++++++++++++++++++++++++++++++>>
這是我第一次寫技術blog的第一篇博文,如有什麼不足,請不要見笑,請留下建議,3Q!

本文是以前在這的,由於那個blog再也不更新,因此如今轉到此處來了
相關文章
相關標籤/搜索