【ctags功能】:
為源碼的變量/對象、結構體/類、函數/接口、宏等產生索引文件,以便快速定位。目前支持41種語言。
【ctags的安裝】
1)在線安裝:
sudo apt-get install ctags (ubuntu)
(RedHat系列使用:yum install ctags)
若不成功,可能是因為源的問題,換一下軟件源update后重新執行上述命令即可。
2)手動下載安裝:
參考步驟(以5.8版本ctags-5.8.tar.gz為例)
解壓后
$ cd ctags-5.8
$ ./configure
$ make
# make install
安裝結束后,使用ctags命令測試是否成功
或whatis ctags, whereis ctags等
【生成tags文件】
安裝成功后,要為源碼文件生成tags文件,才可享受ctags為閱讀代碼帶來的便利。
$ ctags -R
遞歸的為當前目錄及子目錄下的所有代碼文件生成tags文件
為某些源碼生成tags文件,使用如下命令
$ ctags filename.c filename1.c file.h
或
$ ctags *.c *.h
為了使得字段補全有效,在生成tags時需要一些額外的參數,推薦的c++參數主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
選項c++-kinds 用於指定C++語言的 tags記錄類型, --c-kinds用於指定c語言的, 通用格式是 --{language}-kinds
選項 fileds 用於指定每條標記的擴展字段域
extra 選項用於增加額外的條目: f表示為每個文件增加一個條目, q為每個類增加一個條目
【使用方法】
在vim打開源碼時,指定tags文件,才可正常使用,通常手動指定,在vim命令行輸入:
:set tags=./tags(當前路徑下的tags文件)
若要引用多個不同目錄的tags文件,可以用逗號隔開
或者,設置 ~/.vimrc,加入一行,則不用手動設置tags路徑:
set tags=~/path/tags
若要加入系統函數或全局變量的tag標簽,則需執行:
ctags -I __THROW –file-scope=yes –langmap=c:+.h –languages=c,c++ –links=yes –c-kinds=+p --fields=+S -R -f ~/.vim/systags /usr/include /usr/local/include
並且在~/.vimrc中添加(亦可用上面描述的手動加入的方式):
set tags+=~/.vim/systags
這樣,便可以享受系統庫函數名補全、原型預覽等功能了。
如果經常在不同工程里查閱代碼,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir
設置好了tags文件,在定位變量/函數的定義時,最常用的快捷鍵是:
Ctrl + ]
跳轉到變量或函數的定義處,或者用命令
:ta name
而使用快捷組合鍵
Ctrl + o/t
返回到跳轉前的位置。
另外,ctags不會生成局部變量的索引,不過可以使用gd組合鍵(對光標所在處的word進行快捷查找定位)來定位,也是相當快捷的。
$ vim -t myAdd
用vim打開文件時,添加參數-t funcName會自動打開定義該函數的文件並定位到定義首行,上面這句就是找到myAdd定義的文件打開並將光標置於定義的第一行處。
:tags
會列出查找/跳轉過程(經過的標簽列表)
另外,附上vim環境中其他較為好用的快捷鍵:
* 定位至當前光光標所指單詞的下一次出現的地方
# 定位至當前光光標所指單詞的上一次出現的地方
n 定位至跳至已被標記出的單詞下一次出現的地方
shift+n 定位至跳至已被標記出的單詞上一次出現的地方
關於更詳細的ctags用法,vim中使用
:help tags
此時在回頭學習一下vim手冊吧
:help usr_29
不過還有一個小瑕疵, 你修改程序后, 比如增加了函數定義, 刪除了變量定義, tags文件不能自動rebuild, 你必須手動再運行一下命令:
$ ctags -R
使tags文件更新一下, 不過讓人感到欣慰的是vim不用重新啟動, 正在編寫的程序也不用退出, 馬上就可以又正確使用<C-]>和<C-T>了
