C语言的Emacs语义+自动完成模式

时间:2013-01-25 19:48:33

标签: c emacs

我一直在努力使用Semantic自动完成模式工作,但知道我完全卡住了。我通过语义-aa-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)))

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

2 个答案:

答案 0 :(得分:5)

如果我理解正确,Semantic正在工作,你只是在努力设置自动完成。要做到后者,只需从

开始
(require 'auto-complete-config)
(setq-default ac-sources '(ac-source-semantic-raw))

请注意,您必须使用“setq-default”来设置交流电源。那么你应该能够做到

M-x auto-complete-mode

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

答案 1 :(得分:1)

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

M-x semantic-analyze-debug-assist RET

看看它说的是什么。查看\include\stdlib.h以查看解析器对文件的看法。如果你在那里:

M-x bovinate RET

然后您可以搜索malloc是否存在。如果没有,可能存在解析错误,或者某些未正确设置的杂项#define。使用上面的代码,您通常可以在头文件中找到事情开始分解的位置。