我正在寻找一个插件来为emacs中的c ++开发做自动完成弹出窗口。我试过的是Cedet Semantics和Autocompletion mode,只要我已经有几个单词,它们在完成变量和函数名称方面非常简洁。例如,我有一个名为foo的类和一个返回整数1
的函数class foo{
int getInt(){return 1};
};
在main方法中,只要我开始输入
int main(){
foo bar;
bar.get...
}
插件没有问题弹出像bar.getInt()这样的建议。但是,我真正想要的就是在Eclipse中,只要按下“点”,就可以为我生成可能的选择。在Emacs中可以吗?感谢
答案 0 :(得分:2)
这取决于您自动完成的设置& CEDET。看起来自动完成设置为仅在键入几个字符后才显示可能的完成。您可以检查ac-auto-start
变量的值 - 如果这是一个数字,则在此字符数后将调用自动完成。
另一个重要的事情是ac-sources
变量中的内容 - 要使用CEDET,您需要使用ac-source-semantic-raw
或ac-source-semantic
完成源。
要在.
或->
之后自动完成,您可以尝试使用Semantic的内置完成功能,例如:
(defun my-c-mode-cedet-hook ()
(local-set-key "." 'semantic-complete-self-insert)
(local-set-key ">" 'semantic-complete-self-insert))
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook)
P.S。你看过my article on CEDET & C++吗?
答案 1 :(得分:0)
我发现cedet确实没什么吸引力,尤其是在cmake项目下。
我建议使用 https://github.com/Andersbakken/rtags 它会在您键入和使用智能完成时强调错误。只需在获取所需的emacs包
后将其添加到您的init文件中(require 'rtags)
(require 'popup)
(require 'rtags-ac)
(setq rtags-completions-enabled t)
(rtags-enable-standard-keybindings c-mode-base-map)
(add-hook 'c++-mode-hook
(lambda ()
(setq ac-sources '(ac-source-rtags)
)))