你现在可以忘记 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 仅限于“定义/声明”。
还有一些特定于语言的 ctags 变体通常会提供更合理的结果,例如jsctags (JavaScript)或ripper-tags (Ruby)
另一方面,Cscope 可以“使用”并适用于您的所有语言。设置它比设置 ctags 复杂一点,它的使用也有点复杂,但考虑到它的功能,这是非常合乎逻辑的。
cscope 可能遇到的一个“问题”是,与 ctags 相比,围绕它编写的插件并不多。这是一个值得考虑的限制。
至于你列出的插件……</p>
- 是的,#1 和#3 之间有重叠。#2 不生成或使用
tags文件。
- 尝试他们,阅读他们的文档并自己决定。
您甚至没有告诉我们您想如何使用该功能?你追求什么?tags一代?跳转到用法?跳转到声明?类似 IDE 的“类资源管理器”?所有的?
编辑
让我谈谈您的评论和您的编辑:
ctags 和 cscope 都允许您“跳转到声明”任意符号或(通过 cscope 的自定义映射和设置)光标下的符号。
只有 cscope 允许您“跳转到使用”。
Ctags 本身有点愚蠢,而您使用高度动态的语言使 ctags 对于完成目的有点无用。不过,有些语言比其他语言有更好的支持,因此您可能会发现一些有用的第三方插件,例如jedi-vim或Tern for Vim。
TagList 和 TagBar 不生成tags 文件,但它们运行确实运行 ctags 并使用其输出。他们只是不将其写入磁盘。所以是的,你可以使用这些插件“跳转到声明”,但它们仍然与 Vim 的内置 ctags 支持隔离,这可能会导致问题。
看看:help ctags并:help cscope了解他们能做什么。