Linux 核心閱讀工具vim+ctags+cscope+taglist

         今天介紹vim+ctags+cscope+taglist的內核閱讀配置。php

當使用過以後,我相信大部分人都會捨棄以前的Eclipse(我就是活生生的一個樣例)。咱們先來看看實現的界面是怎麼樣的:linux

咱們一塊兒看看是怎麼實現的。這裏主要是經過vim爲基礎的幾款插件搭建而成的,也就是咱們標題中的ctags+cscope+taglist。他們分別的功能例如如下:數據庫

ctags:實現函數間的跳轉,高速查找函數的定義vim

taglist:基於ctags和vim的一款插件,主要是實現右側的文件夾導航函數

cscope:很強大的源代碼搜索工具,可以對函數的定義、調用等進行查找工具

如下咱們來進行搭建優化

1、ctags的搭建與使用spa

首先仍是下載源代碼包:http://nchc.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz
.net

tar zxvfctags-5.8.tar.gz插件

cd ctags-5.8

./configure

make && make install

編譯完畢以後。咱們進行ctags的配置。先進入到咱們的源代碼存放文件夾/home/sleipnir/LinuxCore/linux-2.6.32.61/

而後運行ctags -R。就會在當前文件夾如下生成tags文件。咱們vim一下,並且在vim中輸入set tags=/home/sleipnir/LinuxCore/linux-2.6.32.61/tags就可以經過Ctrl+](進入光標停留的函數相相應的文件夾)和Ctrl+o(返回上一級界面)進行使用。

這裏假設認爲麻煩的朋友,可以把set命令寫進~/.vimrc中。

2、taglist的搭建與使用

taglist是一個ctags的擴充插件,因此安裝以前得先肯定ctags的安裝。效果圖咱們在上面已經展現出來了,先從如下的網址下載個源碼吧:

http://www.vim.org/scripts/download_script.php?src_id=7701
下載完畢以後。在當前的~/文件夾新建一個隱藏文件.vim。也就是~/.vim文件夾。而後把咱們下載下來的文件包放進去解壓。就完畢了。解壓以後的文件結構例如如下

~/.vim/doc/taglist.txt

~/.vim/plugin/taglist.txt

最後作一點小優化,就是把如下的代碼粘進去~/.vimrc文件裏。

" 按F8button。在窗體的左側出現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             " 本身主動摺疊
用法例如如下:

進入vim以後按F8啓動taglist,在taglist窗體中,還可以使用如下的快捷鍵:

<CR>          跳到光標下tag所定義的位置。用鼠標雙擊此tag功能也同樣
o             在一個新打開的窗體中顯示光標下tag
<Space>       顯示光標下tag的原型定義
u             更新taglist窗體中的tag
s             更改排序方式,在按名字排序和按出現順序排序間切換
x             taglist窗體放大和縮小,方便查看較長的tag
+             打開一個摺疊,同zo
-             將tag摺疊起來,同zc
*             打開所有的摺疊,同zR
=             將所有tag摺疊起來,同zM
[[            跳到前一個文件
]]            跳到後一個文件
q             關閉taglist窗體
<F1>          顯示幫助

3、cscope的搭建與使用

cscope可以說是ctags的增強版。因爲ctags僅僅可以跳轉到函數的定義而cscops還可以獲得函數調用的地方等等各方面的信息。

首先仍是下載安裝包吧:

http://sourceforge.net/projects/cscope/files/
下載完畢以後,咱們仍是解壓、./configure、make && make install。

好了。如下進行cscope的配置。

首先。咱們在文件夾如下輸入cscope -Rbkq  <回車>

說明一下參數:
        R 表示把所有子文件夾裏的文件也創建索引
  b 表示cscope不啓動自帶的用戶界面。而只創建符號數據庫
     q 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
  k 在生成索引文件時,不搜索/usr/include文件夾
以後會在當前文件夾生成幾個文件。  cscope.in.out和cscope.po.out文件,cscope.out

而後在 ~/.vimrc該文件下加入例如如下代碼: 
if filereadable("cscope.out") 
    cs add cscope.out 
endif 

這樣每次打開vim就可以直接使用cscope了。
用法:
-----下面爲轉載的.  做者(吳垠)
--------http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
cscope的主要功能是經過同的子命令"find"來實現的
"cscope find"的使用方法:
cs find c|d|e|f|g|i|s|t name
0 或 s 查找本 C 符號(可以跳過凝視)
1 或 g 查找本定義
2 或 d 查找本函數調用的函數
3 或 c 查找調用本函數的函數
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包括本文件的文件

假設每次查找都要輸入一長串命令的話還真是件討人厭的事情, Cscope的幫助手冊中推薦了一些快捷鍵的使用方法, 如下是當中一組, 也是我用的, 將如下的內容加入到~/.vimrc中, 並從新啓動vim:
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>

當光標停在某個你要查找的詞上時, 按下<C-_>g, 就是查找該對象的定義, 其它的同理.按這樣的組合鍵有一點技巧,按了<C-_>後要當即按下一個鍵,不然屏幕一閃就回到nomal狀態了<C-_>g的按法是先按"Ctrl+Shift+-", 而後很是快再按"g"。最後依據上面的代碼優化一下。把ctags的特性。並且彙總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返回
相關文章
相關標籤/搜索