學習ns2過程中,如何在vim中使用cscope高效閱讀代碼

來源:互聯網
上載者:User

首先安裝Ctags、Cscope:

        $ sudo apt-get install ctags cscope

 

然後,在需要建立索引的檔案夾下執行一下指令碼,產生需要的out檔案。指令碼如下:
#!/bin/sh<br />find . -name "*.h" -o -name "*.tcl" -o -name "*.c" -o -name "*.cc" > cscope.files<br /># 如果還需要加入特殊的檔案格式,仿照以上形式填寫<br /># 不建議find . –type f > cscope.files然後cscope -bq,因為可能會報錯<br />cscope -bkq -i cscope.files<br />ctags -R

 

VIM+CTAGS/CSCOPE

 


1、用vim + ctags

a  首先我們必需給要閱讀的原始碼建一個或多個tags檔案,


在shell下利用ctags命令給單個檔案建立tags如下:
 $ ctags  filename.c

要給同一個目錄下的所有檔案建立tags如下:
 $ ctags -R

這時在tags檔案所在的目錄下開啟源檔案閱讀,vim就會自動調用tags檔案。
如果tags檔案不在目前的目錄下,能在命令模式下用下面的命令設定tag檔案
:set tag=tag_file_path

但是一般對我來說tags都在目前的目錄下,所以我習慣於在~/.vimrc中加入:
:set tags=$PWD/tags

b  要在vim下跳到一個函數的定義處能在命令模式下用下面的命令:

     :tag fuction_name
這個命令將把你帶到fuction_name函數的定義處。
這個功能十分有用,以前一直沒有注意。

c  另外,ctrl + ]命令會把當前游標下的單詞作為tag的名字,並直接跳轉。
用ctrl + t命令能回到前一個tag,你能在ctrl + t前面加一個數字表示往回跳
的層數。

d  使用Ctrl + g能顯示當前正在編輯的檔案名稱,及所在的行號。
如果源檔案的排版比較亂的話,能通過命令gg=G來格式化整個源檔案。


2、cscope

在使用cscope之前需要先產生一個資料庫
a  產生索引檔案:


 cscope 用於產生索引檔案的選項:
-R: 在產生索引檔案時,搜尋子目錄樹中的代碼
-b: 只產生索引檔案,不進入cscope的介面
-q: 產生cscope.in.out和cscope.po.out檔案,加快cscope的索引速度
-k: 在產生索引檔案時,不搜尋/usr/include目錄
-i: 如果儲存檔案清單的檔案名稱不是cscope.files時,需要加此選項告訴cscope到
    哪兒去找源檔案清單。能使用“-”,表示由標準輸入獲得檔案清單。
-I dir: 在-I選項指出的目錄中尋找標頭檔
-u: 掃描所有檔案,重建交叉索引檔案
-C: 在搜尋時忽略大小寫
-P path: 在以相對路徑表示的檔案前加上的path,這樣,你不用轉換到你資料庫
    檔案所在的目錄也能使用他了。

如果你的源碼中只含有.c,.h檔案,你能直接使用
$ cscope -Rbq

在使用cscope之前需要先產生一個資料庫,你可以使用cscope-indexer(如果多個
目錄你可以使用-R選項),它會在當前目前下產生一個cscope.files的檔案,這個文
件包含了cscope需要產生索引的全部檔案,因為cscope-indexer不會自動查到.cpp,.S
尾碼的檔案,因此最後使用find來產生cscope.files檔案:
$ find ./ -name “*.c” -or -name “*.h” -or -name “*.cpp” > cscope.files

上面的命令會把目前的目錄下所有.c,.h,.cpp檔案列出並寫入cscope.files檔案中。
接著使用cscope -Rbq來產生索引引。
$ cscope -Rbq

一般使用方法:
$ find ./ -name "*.c" -or -name "*.h" -or -name "*.cpp" -or -name "*.S" | cscope -Rbq

b  接著你就能使用vim來開啟一個檔案來瀏覽編輯代碼了。

想查看cscope的使用方法最好的辦法是在vim中輸入:
:cs help

這裡還是稍稍說明一下:
s: 尋找C語言符號,即尋找函數名、宏、枚舉值等出現的地方
g: 尋找函數、宏、枚舉等定義的位置,類似ctags所提供的功能
d: 尋找本函數調用的函數
c: 尋找調用本函數的函數
t: 尋找指定的字串
e: 尋找egrep模式,相當於egrep功能,但尋找速度快多了
f: 尋找並開啟檔案,類似vim的find功能
i: 尋找包含本檔案的文

例如平常最常用的查詢那個函數調用了函數func():
:cs f c func

:cs find c func
上兩幅:
這個是自動補全:

下面這個是函數參數提示:

有朋友討論大小寫忽略:
這裡大小寫忽略:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.