2010-10-21 62 views
2

如何讓ctags在C++中佔用類?當我跳到一個函數的標籤時,我得到了相同的函數名,但是在錯誤的類中。ctag忽略C++中的類

B b; b.init();

和有

A ::的init(){} B ::的init(){}

我把光標放在b.init的init()和將跳轉到甲:: init(){}而不是B :: init(){}。

請注意,我沒有在我的代碼中使用a和b。所以這可能無法運行,如果你運行ctags。如果這不是一個常見的問題,我可以發佈實際的代碼。

+0

我試過「--extra = + q」,如http://ctags.sourceforge.net/faq.html#7中所述。沒有幫助 – 2010-10-21 22:20:46

+0

使用visual studio。它會識別適當範圍的令牌,而不僅僅是相同的單詞。 – JoshD 2010-10-21 22:21:53

+0

它不會有任何幫助。 Vim必須理解C++來知道b的類型,而不是。 – 2010-10-22 07:45:23

回答

1

我不知道有任何方法可以做到這一點,因爲它需要vim來做C++解析。在這種情況下,我使用:tselect來顯示整個列表並選擇一個。

3

這不解決您原來的問題,但如下面的映射可以幫助:

nnoremap CTRL+] :exe 'tj' expand('<cword>')<CR> 

這將至少讓CTRL+]告訴你的時候也有init()多個定義一個選擇菜單。

0

我寫lh-tags來解決這個問題[這將需要lh-vim-lib]

它不承認B是否是A或B,但它提出了一個小GUI來選擇我們要跳轉到哪個標籤。

把它看作是一個互動的:tselect。將光標置於標識符上並在正常模式下鍵入<c-w><m-down>(可配置)。它還建議基於<c-x>ta:w構建和更新ctags的方法,因爲已爲當前項目設置了g:/b:ctags_dirname