2017-01-22 74 views
1

我試圖用CTAGS用vim,我發現了以下問題:的Vim:T下一頁不將光標移動到下一個標籤

首先,讓我們來看看下面的圖片:enter image description here 如果我按C-]然後光標將在第7行上移動,如下所示:enter image description here

但是,如果我鍵入命令:tn光標仍然在第7行而不是第14行,下一個標記是。爲什麼會發生這種情況,我該如何解決這個問題?如果你看下面的圖片enter image description here在左下角顯示:「tag 2 of 3」,這意味着:tn的作品,我認爲,但光標不移動。

+0

再次閱讀':help:tnext'。 – romainl

+0

@romainl,它表示:跳轉到[count]下一個匹配標籤,默認情況下[count]爲1。我讀了標籤 - !部分,我看到如果標籤在當前文件中,將執行以下操作:goto標籤。這正是我所期待的,但不幸的是它不起作用。我錯過了什麼? – IonutC

+0

您可以通過':tselect'顯示列表來理解'3的標籤2'。 –

回答

3

如果你看看你的tags文件,你可以看到你的fc()三個定義是相同的:

fc pam.cpp /^  void fc() {$/;" f class:A 
fc pam.cpp /^  void fc() {$/;" f class:B 
fc pam.cpp /^  void fc() {$/;" f class:C 

默認情況下,C標籤不提供行:列信息Vim的,它只是提供了一個搜索模式。由於所有三個標籤都是相同的搜索模式,因此Vim始終執行相同的搜索,並始終在同一個地方結束。如果您使用:tag fc,<C-]>,:tnext,:tselect或他們的任何朋友,則無關緊要。

隨着-n選項,C標籤輸出行號,而不是搜索模式:

fc pam.cpp 14;" f class:B 
fc pam.cpp 21;" f class:C 
fc pam.cpp 7;" f class:A 

這是更好,因爲現在,Vim可以跳轉到正確的路線,但標籤上正確排序。解決這個問題的一種方法是使用-u選項:

A pam.cpp 5;" c file: 
fc pam.cpp 7;" f class:A 
B pam.cpp 12;" c file: 
fc pam.cpp 14;" f class:B 
C pam.cpp 19;" c file: 
fc pam.cpp 21;" f class:C 

總之,你應該生成你tags-n-u選項。例如:

$ ctags -Rnu . 

請參閱$ man ctags

+0

我以爲Vim會看到他們來自不同的類,但是我讀了':help ctags',並且我看到';''被Vi解釋爲評論的開始(我不知道)以下內容將被忽略,Vim將不會看到它們來自不同的類別,現在這一切都是有道理的,謝謝你的回答 – IonutC

+0

請參閱我的編輯 – romainl

+0

Vim根本不關心類或除文件名之外的任何內容ex執行的命令 – romainl

相關問題