设置自动完成以使用语义

时间:2012-11-04 12:49:36

标签: c++ emacs autocomplete cedet

我在Emacs中遇到自动完成包的问题。目前我已经启动并运行了具有适当自动完成功能的cedet,但是自动完成包有一些奇怪的行为。在我明确访问包含文件并制作“C-u M-x bovinate”之前,它不使用语义(参议员的?)数据库。然后我可以返回源文件,自动完成的完成列表看起来就像语义一样。

另一点是,如果我编辑我的源文件,例如,在c ++模式下并尝试在c模式下“bovinate”标题,则自动完成将不会在其完成列表中获得任何其他点。

如何自动完成自动完成的任何想法?

我的.emacs文件是(主要部分取自Alex Ott's article

(load "~/.emacs.d/cedet/cedet-devel-load.el")
(add-to-list 'semantic-default-submodes 'global-semanticdb-minor-mode)
(add-to-list 'semantic-default-submodes 'global-cedet-m3-minor-mode)
(add-to-list 'semantic-default-submodes 'global-semantic-mru-bookmark-mode)
(add-to-list 'semantic-default-submodes 'global-semantic-idle-local-symbol-highlight-mode)
(add-to-list 'semantic-default-submodes 'global-semantic-idle-scheduler-mode)
(add-to-list 'semantic-default-submodes 'global-semantic-idle-completions-mode)
(add-to-list 'semantic-default-submodes 'global-semantic-idle-summary-mode)
(add-to-list 'semantic-default-submodes 'global-semantic-decoration-mode)

(require 'semantic/ia)
(semantic-mode 1)

(require 'semantic/bovine/gcc)

(semantic-add-system-include "/usr/include/mpi/" 'c++-mode)

;; ;; Imenu integration
(defun my-semantic-hook ()
  (imenu-add-to-menubar "TAGS"))
(add-hook 'semantic-init-hooks 'my-semantic-hook)

;; Class suggest improvement
(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)

;;;; Semantic and auto-config integration
(require 'auto-complete-config)
(ac-config-default)
(add-to-list 'ac-dictionary-directories "/home/zvord/.emacs.d/ac-dict")
(define-key ac-mode-map [(meta return)] 'auto-complete)

(defun my-cedet-hook ()
  (add-to-list 'ac-sources 'ac-source-semantic))
(add-hook 'c-mode-common-hook 'my-cedet-hook)

从我所看到的,这应该足以让自动完成工作,但事实并非如此。

2 个答案:

答案 0 :(得分:2)

您的自动完成配置是否允许自动开始完成?您需要检查以下变量的值:ac-auto-show-menu - 等待显示菜单可能完成的时间(默认为0.5秒)和ac-auto-start - 何时开始完成(需要多少符号) type - 原始值为2)。

自动完成的完整配置可能看起来像(除my-cedet-hook中的设置外):

(require 'auto-complete-config)
(ac-config-default)
;; start after 3 characters were typed
(setq ac-auto-start 3)
;; show menu immediately...
(setq ac-auto-show-menu t)
;; explicit call to auto-complete
(define-key ac-mode-map [(meta return)] 'auto-complete)

我使用类似的配置,它对我来说很好,显示了语义数据的完成。 您尝试使用哪种语言完成名称?例如,对于C ++,有必要将条目添加到spp-table等。

答案 1 :(得分:0)

尝试改变:

  

(defun my-cedet-hook()     (add-to-list'ac-sources'ac-source-semantic))

成:

  

(defun my-cedet-hook()     (add-to-list'ac-sources'ac-source-semantic-raw))

它应该工作。