5

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

4

2 回答 2

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)

PS 你看过我关于 CEDET & C++ 的文章了吗?

于 2012-05-20T08:12:29.350 回答
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)
)))
于 2015-07-17T21:21:54.667 回答