簡體   English   中英

幾個vim標簽插件之間的區別

[英]Differences between several vim tags plugin

我實際上有兩個問題。

首先,據我所知,有兩個標簽工具:

  1. C標簽
  2. GNU全球aka gtags

我想知道如果我的日常工作集中在Ruby,Rails,JavaScript和Python上,哪一種更合適。 即動態語言。 我已經用Google搜索了一下,看來gtags在某種程度上等效於ctags + cscope?

其次,關於ctags,有一些vim插件:

  1. vim-tags :它可以通過:TagsGenerate命令在Vim中生成標簽文件。
  2. tagbar :一個著名的插件。 看來它可以即時生成標簽。
  3. vim-easytags :看起來像vim-tags,但是具有更多功能。

我很好奇

  1. 這些插件之間有重疊嗎?
  2. 如果存在重疊,該如何整合它們或如何選擇使用哪個重疊?

我知道在一個SO帖子中有兩個問題不是很好,但是我認為這兩個問題是高度相關的,因為它們對於Vim + Tags組合是必不可少的。 希望這個問題可以為希望使用標簽但不像我一樣熟悉標簽的人們提供基礎或教程。 (我找不到vim + ctags的“現代”教程,互聯網上的大多數帖子都已經過時了IMO)

謝謝。

更新:

基本上,我希望能夠

  1. 跳轉到某些功能的聲明
  2. 跳轉到某些功能的用法
  3. 使自動補全更加智能。 我的意思是,如果我有

     class Obj def m1 puts "hello" end end 

    然后當我輸入obj = Obj.new; obj.時,我希望自動obj = Obj.new; obj.顯示m1 obj = Obj.new; obj. obj = Obj.new; obj. 據我所知, YouCompleteMe可以使用ctags的文件,但是即使按照說明進行操作,我也無法對其進行設置。

老實說,我真的不知道ctags可以做什么或可以提供什么。 因此,請隨時提出更多有用的功能。 謝謝!

您現在可能會忘記GNU GLOBAL,因為-上次檢查時-它根本不支持JavaScript。 我不了解Ruby和Python,但對於您來說,測試它應該不難。

Ctags可與JavaScript(及其他)一起使用,但它不喜歡編寫JavaScript的“現代”方式(內聯回調,濫用的文字對象,自調用函數等)。 您可以通過在~/.ctags文件中添加以下幾行來有所幫助:

--langmap=javascript:.js
--regex-javascript=/([A-Za-z0-9._$()]+)[ \t]*[:=][ \t]*function[ \t]*\(/\1/F,function,functions/
--regex-javascript=/function[ \t]*([A-Za-z0-9._$()]+)[ \t]*\(/\1/F,function,functions/
--regex-javascript=/([A-Za-z0-9._$]+)[ \t]*=[ \t]*\{/\1/o,object,objects/
--regex-javascript=/^[ \t]*([A-Za-z0-9._$]+)[ \t]*[:][ \t]*[^\{]/\1/p,property,properties/
--regex-javascript=/^[ \t]+var[ \t]*([A-Za-z0-9._$]+)[ \t]*=[ \t]*[\d"'\[]/\1/v,variable,variables/

這些對我有用,但是我的JavaScript確實有點“老派”。 請注意,ctags僅限於“定義/聲明”。

還有一些特定於語言的ctag變體,通常會給出更合理的結果,例如jsctags(JavaScript)ripper-tags(Ruby)

另一方面,Cscope可以“使用”並適用於所有語言。 設置它比設置ctags涉及更多的工作,它的用法也更復雜,但是考慮到它的功能,這是很合邏輯的。

cscope可能有一個“問題”,就是與ctags相比,圍繞它編寫的插件並不多。 這是一個值得考慮的限制。

至於您列出的插件…

  1. 是的,#1和#3之間有重疊。 #2不會生成或使用tags文件。
  2. 試試看,閱讀他們的文檔,然后自己決定。

你甚至沒有告訴我們你是怎么想使用該功能? 你要干嘛 tags生成? 跳轉到用法? 跳轉到聲明? 類似IDE的“類資源管理器”? 所有的?

編輯

讓我談談您的評論和您的修改:

  1. ctags和cscope都允許您“跳轉到聲明”任意符號或光標下的符號(通過cscope的自定義映射和設置)。

  2. 只有cscope允許您“跳轉到用法”。

  3. Ctags本身有點笨,而您使用高度動態的語言會使Ctags對於完成目的有點用處。 但是,某些語言比其他語言具有更好的支持,因此您可能會找到一些有用的第三方插件,例如jedi-vimTern for Vim

  4. TagList和TagBar不會生成tags 文件,但它們會運行ctags並消耗其輸出。 他們只是不將其寫入磁盤。 所以,是的,您可以使用這些插件“跳轉至未成年人”,但它們仍與Vim內置的ctags支持隔離,可能會導致問題。

請參閱:help ctags:help cscope來了解它們可以做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM