我在emacs和vim中最想念的IDE功能是代码导航和查找用法。这两个编辑器都具有以下类似功能:
据我了解,这两个系统都非常不精确。如果我们有相同名称的相似标识符,则标记和范围可能会混淆它们。有没有更好的选择,它们究竟有多精确?
答案 0 :(得分:6)
我在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))))
答案 1 :(得分:5)
GNU Global允许重复的标识符,您可以选择所需的标识符。
答案 2 :(得分:4)
有许多程序输出与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
足以满足我的谦卑需求。
答案 3 :(得分:3)
请参阅eclim,它具有非常有用的emacs interface,它支持与Eclipse相同级别的代码导航。
Eclim还支持C / C ++,虽然在emacs-eclim中尚未实现对此的支持,但是如果你知道Elisp那么实现起来非常简单,因为对于java来说,所有必要的基础设施已经存在,所以你只需要添加c ++调用的实现。