2012-02-17 120 views
-1

ctags -R dirName,vim -t標記非常強大,因爲在這兩個命令之後,您現在可以在該項目的代碼之間導航,例如,您可以跳轉到某些函數的代碼使用:tag functionName,但該操作仍然存在一些缺陷,如通常情況下一個源代碼可能包含某些函數調用(如va_start()),而此代碼未包含在dirName目錄中,因此索引沒有爲這個函數生成,並且你不能導航到va_start()的定義,但是需要導航到這個函數?如何找到該代碼?我甚至不知道va_start()的確切位置。如何爲系統功能或第三方功能生成ctags索引?爲什麼vim -t ctags不夠?我不能跳轉到我想要的功能

+0

你不能只使用簡單的搜索va_start()? – hovanessyan 2012-02-17 09:20:32

+0

是的,我可以搜索谷歌和其他搜索引擎,但我想要做的就是跳到va_start()的定義並讀取va_start()的代碼 – thinke365 2012-02-17 09:22:34

回答

4

當您使用「ctags -R dirName」時,您只是索引目錄dirName的內容的符號。

發生了什麼「va_args」在stdarg.h中定義,它是C標準庫的標頭。

每當您使用外部庫中的符號時,都會遇到同樣的問題。

所以,如果你想讓所有的符號都可用,除了你的程序之外,你還可以索引外部庫的代碼。

這意味着:

  1. 的源代碼應該可以(這是情況並非總是如此)

  2. 一旦你有你的系統文件所在,它應該被解析到上找到被包含在你的「標籤」文件中。

因此當你執行ctags -R projectPath可以執行ctags -Ra /usr/include追加的/ usr/include目錄到您的標記文件中的所有內容。

更一般地,你想要做一些像ctags -Ra librarySourcePath這樣的操作來獲得程序中使用的所有符號。

編輯: 但要小心:/ usr/include可能包含大量文件,因此您的文件大小可能會大大增加,因此,每次搜索符號時都會跳轉到該文件,它可能會慢很多!

+0

'stdarg.h'是STL的一部分? ??!對於該答案,額外+1。請注意,標籤生成速度會比較慢,但vim會通過假設標籤文件首先排序來嘗試查找標籤。如果是這種情況,那麼達到標籤所需的時間取決於日誌(標籤數量),所以它不應該那麼慢。 – Benoit 2012-02-17 12:34:08

+0

@Benoît:我的不好,我會修復:) – 2012-02-17 13:16:04

+0

@XavierT。如果我修改了一些文件,並且formmer索引不正確,因爲函數的定義可能不在這個位置,那麼-Ra會刷新這樣的索引嗎? – thinke365 2012-09-09 21:09:15

相關問題