如何在 Emacs 中为 C、C++ 和 JAVA 获取 Eclipse 风格的函数完成?我喜欢 Emacs 文本编辑器的强大功能,但缺少“智能感知”功能让我不得不使用 Eclipse。
9 回答
M-/
是基于当前缓冲区内容的快速而肮脏的自动完成。它不会为您提供 Eclipse 中的所有功能,但功能却出奇的强大。
我只能作为一个没有太多使用 Eclipse 的人来回答你的问题。但!如果对您在 emacs 缓冲区中键入或查看的所有内容进行了非常好的快速启发式分析,并且您可以智能完成所有这些内容,而不仅仅是在代码中?
Mx 加载库完成 Mx 全局设置键 C-RET 完成 RET
当我做java开发时,我曾经使用过:
当您显式调用 jdee 提供的函数时,JDEE 将提供方法名称补全。它在 jdee 模式下具有此功能的键盘绑定。
现在,我正在为 Emacs使用自动完成功能。作为当前的 Visual Studio 和前 Eclipse 用户,我可以说它可以很好地与这两个应用程序相媲美。它仍然不如 Microsoft 的 IntelliSense for C#,但有人会说 C++ 是出了名的难以解析。
它利用了(我相信)来自Cedet的Semantic包的强大功能,与Smart Complete相比,我发现它使用起来感觉更好。完成了C++成员、局部变量等,很不错。但是,它归结为无法完成重载方法(它只显示一次没有参数的函数,但我相信这是 Cedet 的限制),以及其他各种事情。不过未来可能会有所改善!
顺便说一句,我在这里可能是错的,但我认为您需要为班级成员完成设置一个 EDE 项目(就像您通常使用 Semantic 一样)。我只在有一个 EDE 项目时使用过它,所以我认为这是真的。
搜索我发现的网络http://www.emacswiki.org/cgi-bin/wiki/EmacsTags#toc7complete-tab
在 etags 中描述。它是M-Tab
默认绑定的。此绑定可能对您来说是个问题
此外,etags 有一些限制,这可能会惹恼你......
该链接还指出 CEDET 具有更好的符号完成支持。
您是否尝试过 Eclipse 的 emacs 插件?
http://people.csail.mit.edu/adonovan/hacks/eclipse-emacs.html
auto-complete-clang是你想要的。使用实际的 C++ 编译器进行补全不会出错。
它唯一的问题是无法知道要传递给编译器的内容-I
和标志。-D
有一些 emacs 包可以让你声明项目,然后你可以使用它。
就个人而言,我将 CMake 用于所有 C 和 C++ 工作,因此我编写了一些CMake 代码以通过目录局部变量将该信息传递给 emacs。它可以工作,但我正在考虑编写一个从 emacs 调用 cmake 的包,这样可以减少入侵。
我在 CEDET 之上编写了一个特定于 C++ 的包,它可能会提供您想要的东西。它提供了一个类似 Eclipse 的函数参数提示。函数参数提示和完成都支持重载函数。包位于此处:
https://github.com/abo-abo/function-args
请务必查看漂亮的屏幕截图:
https://raw.github.com/abo-abo/function-args/master/doc/screenshot-1.png