6

我正在使用 Emacs 和 CEDET 并自动完成代码完成。最初我设置了 CEDET,所以它每次在 Emacs 启动时加载。

但是,这花了很长时间,所以我认为在需要时加载它会很聪明,即 - 在我的情况下 - 在进入 C++ 模式时。

因此,我将原始函数移到了lambda进入 C++ 模式时调用的函数中:

; cscope for c(++) programming (finding symbols, etc.)
(require 'xcscope)

; C++ stuff
(add-hook 'c++-mode-hook
      (lambda ()
        (load-file "/usr/share/emacs/site-lisp/cedet-common/cedet.el")
        (global-ede-mode 1) ; enable project management system
        (semantic-load-enable-code-helpers) ; enable prototype help and smart completion
        (require 'auto-complete-config)
        (add-to-list 'ac-dictionary-directories "~/elisp/ac-dict")
        (add-to-list 'ac-sources 'ac-source-semantic)
        (local-set-key (kbd "C-:") 'semantic-ia-complete-symbol-menu) ; set shortcut for auto completion.
        (local-set-key (kbd "C-.") 'ac-complete-semantic)
        (ac-config-default)
        )
      )

没有错误,但是我有以下问题: Emacs第一次进入C++-mode时,代码补全不能正常工作。但如果 Emacs 第二次进入 C++ 模式,一切正常。

有人知道我做错了什么吗?

4

1 回答 1

8

CEDET 初始化设置了它自己的 C 和 C++ 模式挂钩。如果它在运行同一个钩子时安装了它的钩子,那么它就不会运行,并且你的第一个缓冲区也不会初始化。

您可以做的是在启动时加载 CEDET,然后在 C 模式挂钩中初始化代码助手。这样 C++ 模式将使用 mode-local 进行初始化,但额外的函数将在钩子运行后安装,因此可能会起作用。我自己没有试过。

我认为 EDE 模式并不慢,所以在初始化时也可以这样做。

于 2010-06-20T13:32:58.450 回答