之前一直使用vim+ctags+cscope來弄c的代碼,最近看同事使用gtags,覺得在搜索方面要高級很多,網上大多都是emacs+gtags的資料,而vim的則比較少,這里搞通了之后,做個記錄。
1.下載、安裝 global
wget http://tamacom.com/global/global-6.6.2.tar.gz
tar xzvf global-6.6.2.tar.gz
cd global-6.6.2
./configure
make && make install
2.將生成的文件拷貝到.vim對應的目錄
cp gtags-cscope.vim gtags.vim ~/.vim/plugin/
(我沒有使用vbundle安裝插件,因此直接拷貝到了plugin目錄)
3.在代碼的根目錄中執行
cd ~/postgresql-10.1
gtags
會生成幾個文件:GPATH GRTAGS GTAGS
4.在.vimrc中添加gtags配置
set cscopetag " 使用 cscope 作為 tags 命令 set cscopeprg='gtags-cscope' " 使用 gtags-cscope 代替 cscope "gtags.vim 設置項 let GtagsCscope_Auto_Load = 1 let CtagsCscope_Auto_Map = 1 let GtagsCscope_Quiet = 1
(即使添加這些,我的cscope和ctags還是照樣可以使用)
5.打開代碼,可以使用了,但是效果和emacs還是有點不一樣:
1)在根目錄中,可以查找某個函數,然后打開文件
root@seg01 postgresql-10.1]# global -x pg_parse_query pg_parse_query 596 src/backend/tcop/postgres.c pg_parse_query(const char *query_string)
2)打開文件
[root@seg01 postgresql-10.1]# vim src/backend/tcop/postgres.c
3)使用Gtags查找:Gtags pg_parse_query(這里會自動補全,使用tab鍵)
結果顯示在quickfix中,多條結果可以用鼠標來點擊,或者cn下一條,cp上一條來選擇
6.其他幾個使用說明
01.Gtags func:查看定義處 02.Gtags -r func:查看引用處 03.Gtags -s text:查看未被數據庫定義的tags 04.copen:打開quick fix顯示窗口 05.cclose:關閉quick fix顯示窗口 06.cn:下一項 07.cp:上一項 08.cl:列出查詢到的相關項 09.ccN:到列表中第N個符號處 10.Gtags -g pattern:搜索pattern指定的字符串 11.Gtags -gie -pattern:-e選項可以用於搜索’-‘字符,但是基礎搜索,沒有元字符,-i選項忽略大小寫,類似於grep的選項 12.GtagsCuorsor:取決於光標位置,要是在定義處,查詢其引用,要是在引用處,跳轉至其定義處,否則就是Gtags -s命令 13.Gtags -P text:查詢包含text的路徑名,Gtags -P后接/dir/為列出叫做dir目錄下文件,后接\.h$列出所有的include文件 14.Gtags -f file:列出file里的符號,Gtags -f %則列出當前文件的符號
7.在之前ctags+cscope中,查找定義和查找使用都很方便,但是有時候是找不到目標的···
有一種情況最不好找了,一個函數記得一部分名稱,沒法搜索到,但是用gtags后就好搜索了,會自動補全。
8.cscope中常用的幾個命令:
cs find s : 查找符號,會顯示列表出來
cs find g :查找定義
cs find c: 查找調用本函數的函數
cs find c: 查找本函數調用的函數
cs find t:查找本字符串
9.使用vimgrep也有局限性,只能查找具體的文件,不能自動查找所有的子目錄。
配好之后感覺還是很爽的,這樣查找起來方便很多。