2014-04-13 49 views
0

我在vim中使用ctags插件。我有一個惱人的問題 - 當我想跳轉到成員函數定義時,一些具有重複名稱的函數/方法列在我可以跳轉的標籤列表中。Vim和ctags - 選擇適當的標籤

更荒謬的是 - 這些標籤中的大部分甚至都沒有與簽名甚至是類別相匹配!

這怎麼可以這麼笨?我怎麼能不知道我想跳轉到符號定義:具有相同的類和相同的簽名。

如果沒有插件可以做到這一點,我怎樣才能改變VIM(最好用腳本)做比較簽名和類時選擇成員?或者我必須深入研究vim代碼才能做到這一點?

我提出了一個屏幕截圖,讓人們會明白我在說什麼

screenshot

這是荒謬的,它把涵蓋了所有成員都有名字「跑」的標籤並沒有關係甚至不在乎檢查同一個班級和簽名,因爲它完全消除了這個問題!

回答

0

對於所有的悲觀的答案 - 有一個解決方案。一個Vim插件,用於處理我遇到的EXACT問題 - 一個SmartTag插件。

https://github.com/MarcWeber/SmartTag

但是,它並沒有現成的工作,因爲你需要打補丁的vim,所以你可以替換tagfunc(功能是負責標籤跳躍和VIM標籤機制改變行爲)

所以,我修補最新的vim來源與此補丁:

Discussion board - >補丁數四(Download patch

我已經打補丁的vim 7.4的源,編譯它,插件talled它並添加一行的.vimrc

集tagfunc =智能標籤#SmartTagFunc

這就是它! Vim不再跳到啞牌!現在它根據類別和範圍進行區分。

我不知道爲什麼這個插件是如此不受歡迎 - 這是一個LIFESAVER!

Source

4

您的期望太高誤導,因爲Vim和ctags都不能像IDE那樣理解您的代碼。

沒有內置的方式,以使Vim只列出「相關」標籤,因爲:

  • 它不知道什麼是「相關」給你,
  • 它列出了所有的匹配標籤按tags文件中的外觀順序從當前文件中的文件開始。

你也許可以編寫一個函數,而不是使用:tjump和朋友,會做你所要求的,雖然魔術,但我不認爲這將是一個微不足道的努力。

然而,還有,many "better" alternatives to ctagsthen some.你應該嘗試它們。

0

這不是一個非常優雅的解決方案,但是您可以安裝Eclipse及其C/C++開發工具,然後使用eclim(http://eclim.org)讓Eclipse以Vim作爲前端工作。用C代碼對我來說效果相當好。我也使用cscope僅用於C代碼,但也可以提供「更智能」的標籤識別。 ctags功能強大但很笨拙。