我在Emacs中使用cscope和semantic.这对我来说已经足够了.
在cscope中,我大量使用的两个函数是cscope-find-global-definition和cscope-find-this-symbol.以前的功能非常精确.
C-c s s         Find symbol. 
C-c s d         Find global definition.
至于语义(动态索引,不需要生成TAGS).
(global-set-key [f8] 'semantic-ia-fast-jump) ;; jump to definition.
(global-set-key [S-f8]                       ;; jump back
                (lambda ()
                  (interactive)
                  (if (ring-empty-p (oref semantic-mru-bookmark-ring ring))
                     (error "Semantic Bookmark ring is currently empty"))
                  (let* ((ring (oref semantic-mru-bookmark-ring ring))
                         (alist (semantic-mrub-ring-to-assoc-list ring))
                         (first (cdr (car alist))))
                    (if (semantic-equivalent-tag-p (oref first tag)
                                                   (semantic-current-tag))
                        (setq first (cdr (car (cdr alist)))))
                    (semantic-mrub-switch-tags first))))
有许多程序可以输出与 ctags 兼容的tags文件。由于 ctags 中的一些低级限制,它们通常是特定于语言的,但是当您有多个具有相同名称的方法时,它们和 ctags 都没有帮助,因为这些工具只完成工作的索引部分。搜索索引实际上是 Vim 的工作,因为它是一个该死的文本编辑器而不是一个 IDE,所以决定哪个方法声明是正确的方法的意义为零。
幸运的是,当有多次点击时,Vim 会显示一个可操作的列表。但这就是你能走多远。
Cscope 比 ctags 稍微聪明一点,并且在 Vim 中使用时,可以进行搜索和索引。但是,与 ctags 一样,cscope仍然是一个代码索引器。
实际上可以同时使用两者,set cscopetags但这对您的命名问题没有帮助。
你可以试试 GNU Global。但它不支持 JavaScript,所以我从来没有真正使用它足够长的时间来发表意见。
IDE 通常通过在后台针对您的代码运行的特定于语言的解析器/静态分析工具来发挥它们的魔力。Vim 至少有一个限制和一个特性,很难想象它会达到您似乎正在寻找的代码意识水平:
Vim 不是多线程的。所以它不能在后台运行静态分析工具。
Vim 支持数百种语言。对于任何规模的组织来说,为多种语言提供这种功能都是不可能的。
但这对我来说都不是问题,因为Vim 不是 IDE。
而且因为我的项目中没有多个同名的方法。
<C-]>, <C-w>},:tag /foo<Tab>和:cs f c bar足以满足我卑微的需要。