Emacs:使用和初始化CEDET

phi*_*mue 6 emacs hook elisp cedet

我正在使用带有CEDET的Emacs并自动完成代码完成.最初我设置了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)
        )
      )
Run Code Online (Sandbox Code Playgroud)

没有错误,但我有以下问题:当Emacs第一次进入C++模式时,代码完成无法正常工作.但如果Emacs第二次进入C++模式,一切正常.

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

Eri*_*ric 8

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

你可以做的是在启动时加载CEDET,然后在C模式钩子中初始化代码助手.这样C++模式将使用mode-local进行初始化,但是在钩子运行后将安装额外的函数,这样就可以了.我自己没试过.

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