在emacs中寻找自动完成功能

时间:2012-05-19 22:46:32

标签: c++ emacs cedet

我正在寻找一个插件来为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中可以吗?感谢

2 个答案:

答案 0 :(得分:2)

这取决于您自动完成的设置& CEDET。看起来自动完成设置为仅在键入几个字符后才显示可能的完成。您可以检查ac-auto-start变量的值 - 如果这是一个数字,则在此字符数后将调用自动完成。 另一个重要的事情是ac-sources变量中的内容 - 要使用CEDET,您需要使用ac-source-semantic-rawac-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)
)))