Emacs 24中的自动补全在Java、C或C++模式下无法工作

7

我使用marmalade仓库安装了自动补全插件。所有内容都已正确安装,并通过在我的init.el文件中添加以下代码成功启动并运行了自动补全,没有出现任何错误:

;; auto-complete
(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/elpa/auto-complete/dict")
(ac-config-default)

现在我可以在Emacs Lisp中使用自动完成,但是每当我使用其他模式时,比如Java、C或C++,它就完全不起作用。

我也安装了yasnippet(它完美地工作),不确定这是否与此有关。以下是我的init.el中相关的代码:

;;yasnippet
(add-to-list 'load-path
              "~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas-global-mode 1)

我正在学习Emacs,目前还是个初学者。我已经查看了所有的文档和 Stack Overflow,但没有找到与之相关的任何内容。如果有任何帮助,我将不胜感激。


在这些 C 语言模式下,是否激活了自动完成模式?这些模式的 modeline 中应该显示“AC”。 - Chris Barrett
@ChrisBarrett 请看下面我对你回答的评论。 - Nico
2个回答

6
您可能需要添加完成源。以下是我的配置内容:
(set-default 'ac-sources
             '(ac-source-abbrev
               ac-source-dictionary
               ac-source-yasnippet
               ac-source-words-in-buffer
               ac-source-words-in-same-mode-buffers
               ac-source-semantic))

更新ac-config-default 应该可以解决这个问题,但如果自动完成功能在这些模式下没有激活,请尝试将以下内容放入您的 init.el 文件中:

(dolist (m '(c-mode c++-mode java-mode))
  (add-to-list 'ac-modes m))

(global-auto-complete-mode t)
< p > 更新2:我已经发布了一个Gist,可以使您的init.el适应package-install以使用自动完成。

我无法确定您引用的是哪个版本的auto-complete,但最新版本对我来说运行良好。

C模式下工作正常的自动完成


这是你的自动补全配置还是init.el/.emacs文件? - Nico
你在 GitHub 上有你的 init.el 吗? - Chris Barrett
1
不,抱歉。我从未在GitHub上发布过任何东西。让我先弄清楚然后再上传,然后我会回来报告的。非常感谢你的帮助。 - Nico
谢谢你的提示。这是我的初始化文件:https://gist.github.com/96d701f5d3f106ab949b 因为我还在学习,所以可能有点混乱。 :D - Nico
1
我只想补充一下,这对我没有用... Emacs 24.2.2,auto-complete v1.3.1。而且根本没有yasnippet的配置。 - galactica
显示剩余4条评论

0

我和你遇到了完全相同的问题。Emacs-Lisp可以很好地使用auto-complete,但是C、C++却不能。在尝试了各种组合之后,我发现将.emacs文件中的yasnippet注释掉可以解决我的问题。希望这能对你有所帮助。我的auto-complete版本是1.3.1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接