Emacs语义&x2B;C语言的自动完成模式

Emacs语义&x2B;C语言的自动完成模式,c,emacs,C,Emacs,我一直在努力使自动完成模式与语义很好地工作,但我知道我完全卡住了。我已经成功地通过语义ia complete symbol实现了语义自动完成(尽管出于某种原因,它无法完成malloc(),这很奇怪) 一些.emacs代码片段: (add-to-list 'ac-dictionary-directories "~/emacs-src/auto-complete-1.3.1/") (ac-config-default) (ac-set-trigger-key "TAB") (add-to-list

我一直在努力使自动完成模式与语义很好地工作,但我知道我完全卡住了。我已经成功地通过语义ia complete symbol实现了语义自动完成(尽管出于某种原因,它无法完成malloc(),这很奇怪)

一些.emacs代码片段:

(add-to-list 'ac-dictionary-directories "~/emacs-src/auto-complete-1.3.1/")
(ac-config-default)
(ac-set-trigger-key "TAB")

(add-to-list 'ac-sources 'ac-source-semantic) 
(add-to-list 'ac-sources 'ac-source-gtags)



(add-hook 'c-mode-hook
          (defun my-c-mode-hook ()
            (auto-complete-mode)
            (setq ac-sources '(ac-source-semantic))
            (ac-complete-semantic)))

如何使自动完成模式与语义一起工作?

尝试通过以下方式调试自动完成失败:

M-x语义分析调试辅助RET

看看上面写着什么。查看
\include\stdlib.h
,查看解析器对文件的看法。如果您在那里:

M-x bovinate RET


然后您可以搜索查看是否存在
malloc
。如果没有,则可能存在解析错误,或者一些未正确设置的杂项
#define
。使用上面的方法,您通常可以在头文件中找到问题的症结所在。

如果我没有弄错的话,Semantic正在发挥作用,而您只是在努力设置auto complete。要做到后者,只需从

(require 'auto-complete-config)
(setq-default ac-sources '(ac-source-semantic-raw))
请注意,您必须使用“setq default”来设置交流电源。然后你就可以做了

M-x auto-complete-mode

在C/C++缓冲区中,自动完成应该查询语义完成。

@Johan-Hey我面临的问题与您完全相同。你能告诉我你最终是怎么解决的吗?