Cscope是相似於ctags同樣的工具,但能夠認爲她是ctags的加強版,由於她比ctags可以作更多的事。在Vim中,經過cscope的查詢,跳轉到指定的地方就像跳轉到任何標籤;她可以保存標籤棧,因此經過合適的鍵盤映射綁定,你可以在函數向後或向前跳轉,就像一般使用的tags同樣。python
首次使用Cscope時,他會根據源文件生成符號數據庫。而後在之後的使用中,cscope只是在源文件有改動或源文件列表不一樣時纔會重建數據庫。當在重建數據庫時,未改動過的文件對應的數據庫信息會從舊的數據庫中拷貝過來,因此會使重建數據庫快於一開始的新建數據庫。shell
當你在命令行下調用cscope時,你會得到一個全屏選擇窗口,可以使你查詢特定的內容。然而,一旦你查詢的有匹配,那麼就會用你默認的編輯器來編輯該源文件,可是你不可以簡單的使用Ctrl+]或者:tag命令來從一個標籤跳轉到另外一個標籤。數據庫
Vim中的cscope接口是經過以命令行形式調用完成的,而後解析查詢返回的結果。最終的結果就是cscope查詢結果就像一般的tags同樣,這樣你就能夠自由跳轉,就像在使用一般的tags(用ctrl+]或者:tag跳轉)。vim
全部的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(「修改這個匹配模式」)。ui
使用方法: :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 :顯示一個簡短的摘要。spa
使用方法: :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|」。
使用|:set|命令來設置cscope的全部選項。理想狀況是,你能夠在你的啓動文件中作這件事情(例如:.vimrc)。有些cscope相關變量只有在|.vimrc|中才是合法的。在vim已經啓動以後再來設置它們沒有任何做用!
‘cscopeprg’指定了執行cscpoe的命令。
默認是」cscope」。
例如:
:set csprg=/usr/local/bin/cscope
‘cscopequickfix’指定了是否使用quickfix窗口來顯示cscope的結果。這是一組用逗號分隔的值。每項都包含於|csope-find|命令(s, g, d, c, t, e, f, 或者i)和旗標(+, -或者0)。
‘+’預示着顯示結果必須追加到quickfix窗口。
‘-’隱含着清空先前的的顯示結果,’0’或者不設置表示不使用quickfix窗口。查找會從開始直到第一條命令出現。默認的值是」」(不使用quickfix窗口)。下面的值彷佛會頗有用:」s-,c-,d-,i-,t-,e-」。
假如’cscopetag’被設置,而後諸如」:tag」和ctrl+]和」vim -t」等命令會始終使用|:cstag|而不是默認的:tag行爲。經過設置’cst’,你將始終同時查找cscope數據庫和tags文件。默認狀況是關閉的,例如:
:set cst :set nocst
‘csto’
‘csto’的值決定了|:cstag|執行查找的順序。假如’csto’被設置爲0,那麼cscope數據將會被優先查找,假如cscope沒有返回匹配項,而後纔會查找tag文件。反之,則查找順序相反。默認值是0,例如:
:set csto=0 :set csto=1
假如’cscopeverbose’沒有被設置(默認狀況是如此),那麼當在增長一個cscope數據庫時不會顯示錶示表示執行成功或失敗的信息。理想狀況是,在增長cscope數據庫以前,你應該在你的|.vimrc|中重置此選項,在增長完以後,設置它。此後,當你在vim中增長更多的數據庫時,你會獲得(但願是有用的)信息展現數據庫增長失敗。例如:
:set csverb :set nocsverb
‘cspc’的值決定了一個文件的路徑的多少部分被顯示。默認值是0,因此整個路徑都會被顯示。值爲1的話,那麼就只會顯示文件名,不帶路徑。其餘值就會顯示不一樣的部分。例如:
:set cspc=3
將會顯示文件路徑的最後3個部分,包含這個文件名自己。
你須要作的第一步就是爲你的源文件創建一個cscope數據庫。大多數狀況下,能夠簡單的使用」cscope –b」。
假設你已經有了一個cscope數據庫,你須要將這個數據庫「增長」進Vim。那將會創建一個cscope「連接」而且使它可以被Vim所使用。你能夠在你的.vimrc文件中作這件事,或者在Vim啓動以後手動地作。例如,爲了增長數據庫」cscope.out」,你能夠這樣作:
:cs add cscope.out
你能夠經過執行」:cs show」來再次檢查以上執行的結果。這將會產生以下的輸出:
# pid database name prepend path 0 11453 cscope.out <none>
提示:
因爲微軟的RTL限制,Win32版本會顯示0而不是真正的pid。
一旦一個cscope連接創建以後,你能夠查詢cscope而且結果會反饋給你。經過命令」:cs find」來進行查找。例如:
:cs find g FTPD_CHECK_LOGIN
執行以上命令可能會變得有點笨重的,由於它要作至關的輸入次數。假若有不止一個匹配項,你將會被提供一個選擇屏幕來選擇你想匹配的項。在你跳轉到新位置以後,能夠簡單的按下ctrl+t就會返回到之前的一個。