歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Cscope的使用(領略Vim + Cscope的強大魅力)

1、Cscope介紹

 

       Cscope是類似於ctags一樣的工具,但可以認為她是ctags的增強版,因為她比ctags能夠做更多的事。在Vim中,通過cscope的查詢,跳轉到指定的地方就像跳轉到任何標簽;她能夠保存標簽棧,所以通過合適的鍵盤映射綁定,你能夠在函數向後或向前跳轉,就像通常使用的tags一樣。

       首次使用Cscope時,他會根據源文件生成符號數據庫。然後在以後的使用中,cscope只是在源文件有改動或源文件列表不同時才會重建數據庫。當在重建數據庫時,未改動過的文件對應的數據庫信息會從舊的數據庫中拷貝過來,所以會使重建數據庫快於一開始的新建數據庫。

       當你在命令行下調用cscope時,你會獲得一個全屏選擇窗口,能夠使你查詢特定的內容。然而,一旦你查詢的有匹配,那麼就會用你默認的編輯器來編輯該源文件,但是你不能夠簡單的使用Ctrl+]或者:tag命令來從一個標簽跳轉到另一個標簽。

       Vim中的cscope接口是通過以命令行形式調用完成的,然後解析查詢返回的結果。最終的結果就是cscope查詢結果就像通常的tags一樣,這樣你就可以自由跳轉,就像在使用通常的tags(用ctrl+]或者:tag跳轉)。

 

2、Cscope相關命令

      

所有的cscope命令都是通過向主cscope命令”:cscope”傳遞參數選項。她最短的縮寫是”:cs”。”:scscope”命令也做同樣的事情並且同時會橫向分隔窗口(簡稱:”scs”)。

      

可用的縮寫有:

add :增加一個新的cscope數據庫/鏈接庫

              使用方法:

                     :cs add {file|dir} [pre-path] [flags]

              其中:

                     [pre-path] 就是以-p選項傳遞給cscope的文件路徑,是以相對路徑表示的文件

前加上的path,這樣你不要切換到你數據庫文件所在的目錄也可以使用它了。

                     [flags] 你想傳遞給cscope的額外旗標

              實例:

                     :cscope add /root/code/vimtest/ftpd

                     :cscope add /project/vim/cscope.out /usr/local/vim

                     :cscope add cscope.out /usr/local/vim –C

 

       find :查詢cscope。所有的cscope查詢選項都可用除了數字5(“修改這個匹配模式”)。

              使用方法:

                     :cs find {querytype} {name}

              其中:

                     {querytype} 即相對應於實際的cscope行接口數字,同時也相對應於nvi命令:

                            0或者s   —— 查找這個C符號

                            1或者g  —— 查找這個定義

                            2或者d  —— 查找被這個函數調用的函數(們)

                            3或者c  —— 查找調用這個函數的函數(們)

                            4或者t   —— 查找這個字符串

                            6或者e  —— 查找這個egrep匹配模式

                            7或者f   —— 查找這個文件

                            8或者i   —— 查找#include這個文件的文件(們)

              實例:(#號後為注釋)

                     :cscope find c ftpd_send_resp                     # 查找所有調用這個函數的函數(們)

                     :cscope find 3 ftpd_send_resp                     # 和上面結果一樣

                    

                     :cscope find 0 FTPD_CHECK_LOGIN       # 查找FTPD_CHECK_LOGIN這個符號

              執行結果如下:

                     Cscope tag: FTPD_CHECK_LOGIN                   

   #   line  filename / context / line

   1     19  ftpd.h <<GLOBAL>>

             #define FTPD_CHECK_LOGIN() \

   2    648  ftpd.c <<ftpd_do_pwd>>

             FTPD_CHECK_LOGIN();

   3    661  ftpd.c <<ftpd_do_cwd>>

             FTPD_CHECK_LOGIN();

   4    799  ftpd.c <<ftpd_do_list>>

             FTPD_CHECK_LOGIN();

   5    856  ftpd.c <<ftpd_do_nlst>>

             FTPD_CHECK_LOGIN();

   6    931  ftpd.c <<ftpd_do_syst>>

             FTPD_CHECK_LOGIN();

   7    943  ftpd.c <<ftpd_do_size>>

             FTPD_CHECK_LOGIN();

   8    960  ftpd.c <<ftpd_do_dele>>

             FTPD_CHECK_LOGIN();

   9    981  ftpd.c <<ftpd_do_pasv>>

             FTPD_CHECK_LOGIN();

Enter nr of choice (<CR> to abort):

然後輸入最前面的序列號即可。

 

       help :顯示一個簡短的摘要。

              使用方法:

              :cs help

 

       kill  :殺掉一個cscope鏈接(或者殺掉所有的cscope鏈接)

              使用方法:

              :cs kill {num|partial_name}

              為了殺掉一個cscope鏈接,那麼鏈接數字或者一個部分名稱必須被指定。部分名

稱可以簡單的是cscope數據庫文件路徑的一部分。要特別小心使用部分路徑殺死一個cscope鏈接。

 

              假如指定的鏈接數字為-1,那麼所有的cscope鏈接都會被殺掉。

 

       reset:重新初始化所有的cscope鏈接。

              使用方法:

              :cs reset

 

       show:顯示cscope的鏈接

              使用方法:

              :cs show

 

       假如你在使用cscope的同時也使用ctags,|:cstag|可以允許你在跳轉之前指定從一個或另一個中查找。例如,你可以選擇首先從cscope數據庫中查找,然後再查找你的tags文件(由ctags生成)。上述執行的順序取決於|csto|的值。

       |:cstag|當從cscope數據庫中查找標識符時等同於“:cs find g”。

       |:cstag|當從你的tags文件中查找標識符時等同於“|:tjump|”。

Copyright © Linux教程網 All Rights Reserved