vim+ctags+cscope配合使用閱讀源碼

來源:互聯網
上載者:User


在閱讀源碼的時候一個好的工具能使效率提高很多。在這,關於工具我就不多說了,vim+ctags+cscope,我這裡主要想介紹一下,這個組合工具的一些提示,這裡有從網上找到了(在此,謝謝那些前輩們的辛勞),也有自己積累的,總之,記錄下來吧。

cscope的工作需要vim、ctags的配合,它們都是基於命令列的。
下面只是給出了三種工具的常用方法,更多功能可查看man手冊,或者官方文檔。

一、Vim
參考:http://oss.lzu.edu.cn/modules/lifetype/index.php?op=ViewArticle&articleId=1014&blogId=1

二、Ctags
安裝:

aptitude install ctags
在原始碼根目錄下執行 ctags -r 命令用來為程式原始碼產生標籤檔案,其-r選項表示遞
歸操作,同時為子目錄也產生標籤檔案。vim利用產生的標籤檔案,可以進行相應檢索、並
在不同的檔案C語言元素之間來回切換。

在vim中ctags的簡單使用
1) 跳轉到指定的函數進入vim後,用 “:tag func_name“ 跳到函數func_name處。使用tag
命令時,可以使用TAB鍵進行匹配尋找,繼續按TAB鍵向下切換。
某個函數有多個定義時

:tag
跳到第一個定義處,優先跳轉到當前檔案
:tnext
跳到第一個
:tfirst
跳到前count個
:[count]tprevious
跳到後count個
:[count]tnext
跳到最後一個
:tlast
你也可以在所有tagname中選擇:
:tselect tagname

如果想跳到包含block的標識符:“tag /block” 然後用TAB鍵來選擇。這裡'/'就是告訴vim
'block'是一個語句塊標籤。
2)用“CTRL + ]“快速鍵,跳轉到游標所在函數標識符的定義處。
3)使用“CTRL + T”退回上層。如果想在以write_開頭的標識符中選擇一下, :tselect /^
write_ 這裡,'^'表示開頭,同理,'$'表示末尾。多個同名的標識符

三、debian預設沒有安裝cscope


一、安裝:atp-get install cscope


運行cscope命令,出現兩個面板,上方是一個尋找結果的顯示面板,下方是一個尋找條件
指定面板。使用TAB鍵在兩個面板間切換,也可使用上下左右方向件和翻頁鍵在同一面板內
貼換位置。選中顯示面板的某個項,斷行符號即可進入該檔案,這是調用vim開啟檔案,這時就
可以結合ctags使用了。當然也可以直接使用vim開啟檔案,結合ctags閱讀源碼。
使用前,必須現使用“cscope-indexer -r”命令遞迴產生索引資訊檔。特殊情況下,還需
要使用者使用find命令,主動產生索引資訊檔,並指定給cscope工具。 cscope提供了如下
九種查詢方式:

Find this C symbol:
#尋找指定的C符號
Find this global definition:
#尋找指定的全域定義
Find functions called by this function:
#尋找指定函數調用的函數
Find functions calling this function:
#尋找調用指定函數的函數
Find this text string:
#尋找字串
Change this text string:
#修改指定字串
Find this egrep pattern:
#尋找匹配字元
Find this file:
#尋找指定檔案
Find files #including this file:
#指定引用標頭檔進行尋找

在對應某一項中輸入尋找條件,斷行符號即可進行查詢,並將結果顯示在顯示面板。

 K跳轉到函數的man頁

  gg=G 按indent縮排格式化整個檔案
  == 格式化整行
   =a{格式化當前{}程式塊

  gf 尋找檔案,在.vimrc中用set path=/u/infdev/**/**/** 來設定搜尋路徑

  /* 折行功能可以將一節濃縮為一行, 只顯示其大概. */
  zo 開啟折行
  zc 關閉摺疊

  在編輯模式下用ctrl+o可以暫時進行命令模式

  [{ 命令跳轉到當前代碼塊的開頭,
  ]} 會跳轉到當前代碼塊的末尾.
  [[ 向前尋找一個函數的開始
  ]] 向後尋找一個函數的開始
  ][ 向前尋找一個函數的結尾,
  [] 向後尋找一個函數的結尾,
  {   到前一個空行上
  }   到下一個空行上
  #   到與當前單詞相同的上一個單詞上
  *   到與當前單詞相同的下一個單詞上
  %   可以讓游標從它當前所在的括弧跳轉到與它相匹配的括弧上去,

  CTRL+] 跳轉tags定義的地方=        ctrl+t返回調用tag的地方

  gD 查詢變數,只在本檔案中
  gd 查詢變數, 只在本函數中
       
  [i        查詢變數的定義
  [<Tab>    跳到變數定義的地方

  set makeprg=nmake  後面nmake可自己定義,一般不用定義
  :make   編譯器
  :cnext 跳到下一個編譯錯誤
  :cc   看完整的錯誤資訊
  :clist 看所有錯誤資訊

  :e b<tab>在命令列用tab可以補全  按ctrl+d列出所有匹配
  q: 列出命令視窗
       
Vim有一種記錄宏的機制。你鍵入"qa"開始把一段宏記錄入寄存器變數`a'中。按下來你可以象平常一樣鍵入你要的操作,只是這些操作都會被Vim記錄進它命名為`a'的宏中, 再次再下"q"鍵,就結束了宏`a'的錄製。當你要重複執行你剛才記錄的那些操作時只要使用"@a"命令。共有26個可用的寄存器供你記錄宏。


二為代碼產生資料庫
2、首先需要為你的代碼產生一個cscope資料庫。產生資料庫很簡單,在你的項目根目錄運行下面的命令:
cscope -Rbq

如果不是c代碼,使用:

$ find ./ -name "*.c" -or -name "*.h" -or -name "*.cpp" -or -name "*.S" | cscope -Rbq
這個命令會產生三個檔案:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符號索引,後兩個檔案是使用"-q"選項產生的,可以加快cscope的索引速度。
具體的參數的含義可以通過:man cscope 得到。-R: 在產生索引檔案時,搜尋子目錄樹中的代碼

-b: 只產生索引檔案,不進入cscope的介面

-q: 產生cscope.in.out和cscope.po.out檔案,加快cscope的索引速度

-k: 在產生索引檔案時,不搜尋/usr/include目錄

-i: 如果儲存檔案清單的檔案名稱不是cscope.files時,需要加此選項告訴cscope到哪兒去找源檔案清單。可以使用“-”,表示由標準輸入獲得檔案清單。

-I dir: 在-I選項指出的目錄中尋找標頭檔

-u: 掃描所有檔案,重建交叉索引檔案


三在VIM中使用cscope
1 、用vim編輯的時候:
vim FILENAME.c
2 把產生的cscope檔案匯入到vim中來
:cs add /路徑/cscope.out 代碼所在目錄
我習慣現切換到代碼所在目錄再操作,所以直接使用:
:cs add cscope.out 就可以了。

3 查看是否已經串連到對應資料庫
:cs s


4 cs f s xxxx 尋找xxxx出現的地方,它能詳細列出哪些檔案的哪行的哪個函數引用,以及該行的內容.
,首先調用“cscope add”命令添加一個cscope資料庫,然後就可以調用“cscopefind”命令進行尋找了。VIM支援8種cscope的查詢功能,如下:例如,我們想在代碼中尋找調用work()函數的函數,我們可以輸入:“:csfind c work”,斷行符號後發現沒有找到匹配的功能,可能並沒有函數調用work()。我們再輸入“:cs find swork”,尋找這個符號出現的位置,現在vim列出了這個符號出現的所有位置。我們還可以進行字串尋找,它會雙引號或單引號括起來的內容中尋找。還可以輸入一個Regex,這類似於egrep程式的功能。

s: 尋找C語言符號,即尋找函數名、宏、枚舉值等出現的地方

g: 尋找函數、宏、枚舉等定義的位置。
cs f g main 游標跳到main函數的位置

d: 尋找本函數調用的函數
cs f d main 列出main函數調用的函數,輸入函數所對應的數字,就可以調到相應掉用的函數

c: 尋找調用本函數的函數
cs f c main 會輸出找到沒有匹配的結果,因為沒有函數調用main函數

t: 尋找指定的字串
cs f t STRING

f: 尋找並開啟檔案


還有在.vimrc下面加上了鍵盤對應
map <F8> :Tlist<CR>
這樣就可以使用快速鍵F8直接進入tlist模式了。這裡注意<F8>和 : 之間有空格的。

在.vimrc下加入一下兩行
set tags=tags;
set autochdir
這樣使用tags時可以首先在目前的目錄下尋找tags檔案,如果沒有則轉到父目錄尋找。依次向上。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.