關於vim,ctags的乙個小技巧

2021-05-23 16:16:28 字數 1038 閱讀 9858

關於vim,ctags的乙個小技巧

vim可以使用ctags製作的tags檔案來瀏覽程式原始檔。問題是,當原始檔存放在目錄樹(也就是所謂的source tree)的時候,該怎麼辦呢? 

在預設情況下,ctags只會處理當前目錄裡的原始檔,而且vim也只會參考當前目錄的tags檔案。這時候,如果當前目錄裡的原始檔引用了其他目錄裡的定義,那麼vim就無法利用tags檔案自動跳轉了。解決這個問題主要依靠兩個技巧: 

一,在目錄樹的根目錄裡,使用命令:

ctags -r 或 ctags --recurse
這兩個命令應該是等效的,但是在我目前使用的ctags(版本5.5.4),ctags -r似乎無效。--recurse引數會讓ctags遍歷整個目錄樹,分析所有子目錄裡的檔案。最後形成的tags檔案會放在根目錄裡。 

二,編輯vim的設定檔案(_vimrc或.vimrc),新增兩行 

set tags=tags;

set autochdir

注意第乙個命令裡的分號是必不可少的。這個命令讓vim首先在當前目錄裡尋找tags檔案,如果沒有找到tags檔案,或者沒有找到對應的目標,就到父目錄中查詢,一直向上遞迴。因為tags檔案中記錄的路徑總是相對於tags檔案所在的路徑,所以要使用第二個設定項來改變vim的當前目錄。

使用這兩個技巧後,就可以在目錄樹中自由的瀏覽源程式了。

另外,幾個相關的話題:乙個是,我發現用這種方法跳轉到別的目錄,只對ctrl-]和g ctrl-]有效果,而:ta或:ts命令,卻還是只使用當前目錄的tags檔案,不知道這算不算是vim的bug。

另外,就算是在根目錄使用了ctags命令,最好也還是在常用的目錄裡再使用一次ctags命令。因為vim總是首先在當前目錄中尋找tags檔案,所以如果第一次搜尋就能找到的話,那麼速度就會快多了。

另外乙個話題是,儘管用g ctrl-]來跳轉是非常方便的命令,但是因為這個命令要搜尋整個tags檔案來找出所有的匹配定義,所以速度上就比只找出第乙個定義的ctrl-]要慢多了。如果對於定義比較確定的話,那麼最好還是用ctrl-]來執行吧。

關於vim,ctags的乙個小技巧

vim可以使用ctags製作的tags檔案來瀏覽程式原始檔。問題是,當原始檔存放在目錄樹 也就是所謂的source tree 的時候,該怎麼辦呢?在預設情況下,ctags只會處理當前目錄裡的原始檔,而且vim也只會參考當前目錄的tags檔案。這時候,如果當前目錄裡的原始檔引用了其他目錄裡的定義,那麼...

VIM ctags的乙個小技巧

vim可以使用ctags製作的tags檔案來瀏覽程式原始檔。問題是,當原始檔存放在目錄樹 也就是所謂的source tree 的時候,該怎麼辦呢?在預設情況下,ctags只會處理當前目錄裡的原始檔,而且vim也只會參考當前目錄的tags檔案。這時候,如果當前目錄裡的原始檔引用了其他目錄裡的定義,那麼...

乙個關於博士的小故事

下面是我看到的乙個小故事,也許已經很舊了,但是很有教育意義,覺得不錯就發上來了。有乙個博士分到一家研究所,成為學歷最高的乙個人。有一天他到單位後面的小池塘去釣魚,正好正副所長在他的一左一右,也在釣魚。他只是微微點了點頭,這兩個本科生,有啥好聊的呢?不一會兒,正所長放下釣竿,伸伸懶腰,蹭蹭蹭從水面上如...