在Vim中使用ctags


本文轉載於: http://www.vimer.cn
如何在Vim中使用ctags?之前在《把Vim打造成真正的IDE》系列裏已經講過大致的ctags在vim中的使用,這篇文章我們就詳細的講一下。

首先要明白,ctags是什麼?

官方的解釋是:產生標記文件以幫助在源文件中定位對象。

其生成的標記文件tags中包括這些對象的列表:

用#define定義的宏
枚舉型變量的值
函數的定義、原型和聲明
名字空間(namespace
類型定義(typedefs)
變量(包括定義和聲明)
類(class)、結構(struct)、枚舉類型(enum)和聯合(union
類、結構和聯合中成員變量或函數

那麼我們用怎樣的參數來使ctags正常的生成我們需要的tags文件呢?在這裏我們就不去挨個學習那些枯燥的參數了,直接參看 omnicppcomplete 提供的ctags生成語句:

ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .

每個參數解釋如下:

-R:ctags循環生成子目錄的tags

--c++-kinds=+px :ctags記錄c++文件中的函數聲明和各種外部和前向聲明

--fields=+iaS :ctags要求描述的信息,其中i表示如果有繼承,則標識出父類;a表示如果元素是類成員的話,要標明其調用權限(即是public還是private);S表示如果是函數,則標識函數的signature。

--extra=+q:強制要求ctags做如下操作—如果某個語法元素是類的一個成員,ctags默認會給其記錄一行,可以要求ctags對同一個語法元素再記一行,這樣可以保證在VIM中多個同名函數可以通過路徑不同來區分。

OK,那麼tags文件就生成好啦,利用這個文件我們可以做很多強大的事情,包括前面用過的插件,omnicppcomplete、taglist、showfunc之類的,都是依賴於它的。

那麼除了插件上的作用外,我們用戶在vim裏面怎麼使用他呢?

其實最簡單的就是:把光標移動到某個元素上,CTRL+],就會跳轉到對應的定義啦。CTRL+o可以回退到原來的地方。

還有一個操作經常被人忽略,就是,如果當前光標下是個局部變量,在VIM裏輸入gd的話,就會跳到這個局部變量的定義處,也是非常方便滴~~

另外,tags必須在vim運行的當前目錄,才能在vim裏面正確跳轉,當然也不是沒有辦法解決:settags="tags的文件路徑"即可,不過如果像我前面文章說的那樣定義了F12來快速生成tags的話(快速連接),也不會經常用到更改路徑吧,哈哈。

順便說一句,tags生成路徑最好不要包含中文哦~~

OK,在Vim中使用ctags就到這裏,下次我們會一起看看據說ctags的升級替代品,cscope~

另附 ctags官方下載地址,目前最新版本爲5.8

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章