c++ - 设置自动完成以处理语义

标签 c++ emacs autocomplete cedet

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

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

有什么想法可以自动完成工作吗?

我的 .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)

从我读过的所有内容来看,这应该足以获得自动完成工作,但事实并非如此。

最佳答案

您的自动完成配置是否允许自动开始完成?您需要检查以下变量的值:ac-auto-show-menu - 等待多长时间才能显示可能完成的菜单(默认为 0.5 秒),以及 ac-auto-start - 何时开始补全(您需要输入多少个符号 - 原始值为 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 等添加条目。

关于c++ - 设置自动完成以处理语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13218664/

相关文章:

c++ - 如何将模板类型(std::array 或 std::vector)传递给模板参数

c++ - 如何通知其他进程文件已标记为删除?

wpf - WPF 中的自动完成文本框

javascript - 更新或更改预输入数据

javascript - 自动完成 ="OFF"不工作 - Chrome 移动版

c++ - fread/fwrite 大小和计数

c++ - constexpr 构造具有私有(private)成员的对象

macos - 强制自己掌握 Emacs

python - emacs 根据文件中已有的内容使用不同的缩进

emacs - 当 emacs 锁定时