Answers:
免责声明:我是讽刺模式的作者
如果您只想智能自动完成功能,我可以推荐使用讽刺模式和company-irony。
尚未被引用的另一个工具是emacs-ycmd。
irony-mode
clang_codeCompleteAt
使用已解析的TU(但未保存的更改)进行呼叫需要3-5秒。是irony-mode
比这更快吗?
检查我的指南。它列出了几种在C / C ++中自动完成的方法。
这些选项是:
使用讽刺。高度推荐,因为它使用Clang且与其他解决方案相比易于设置。
使用Emacs的内置解析器。这是从Emacs解析器Semantic中获得的最好的自动完成功能,但是在大型项目(如Linux内核)上会很慢。
company-mode
与一起使用软件包company-clang
。为系统包含路径提供良好的代码完成功能,因为它可以自动从Clang获取路径,但必须对本地项目进行一些配置
company-mode
与一起使用company-gtags
。它使用从GNU Global生成的标签数据库作为完成。您可以使用它为您的项目在本地提供完整的代码。它并不是完全智能,因为它会将生成的数据库中的所有内容都扔给您。
rtags
通过提供用于实时分析的服务器来进一步扩展。但是,与纯Elisp解决方案相比,设置起来很复杂。
RTags需要rdm
运行一个单独的守护程序,该守护程序使用clang进行代码完成,代码导航和重构。rdm
还可以用作符号数据库,这意味着自动完成比仅直接调用的任何解决方案都快得多clang_codeCompleteAt
。
RDM需要编译标志信息为您的项目可以是一个麻烦,但如果从照做RTags页面和符号链接gcc-rtags-wrapper.sh
到gcc
,g++
,cc
和c++
RDM自动获取与上重新编译新编译标志更新。
解决方案1:公司模式+叮当声
唯一的问题是您需要告诉公司模式在哪里搜索项目的c / c ++头文件。
如果使用cmake,则可以让https://github.com/redguardtoo/cpputils-cmake为您进行设置(提示:我是cpputils-cmake的作者)。
要么
解决方案2:公司模式+ GNU全球
无需多说,您需要使用gnu global cli工具构建标签,如其他人所述。
MX语义模式
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
标签表
找 。名称“ *。[chCH]” -print | etags-
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags,ctags-为Emacs,vi生成标记文件
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
CMi(或M-TAB)即时完成。如果启用了语义模式,则尝试使用语义解析器数据。如果语义模式被禁用或失败,请尝试使用所选标签表完成操作(请参见标签)
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M- (find-tag)提示标签名称&&跳转到定义
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e