Я использую Emacs с CEDET и автоматический завершенный для завершения кода. Первоначально я настроил CEDET, таким образом, он загружается при запуске Emacs каждый раз.
Однако это заняло довольно долгое время, таким образом, я думал, что это будет умно для загрузки его просто в случае необходимости, т.е. - в моем случае - при вводе C ++-Mode.
Таким образом, я переместил исходную функцию в a lambda
это называют при вводе C ++-mode:
; 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 ++-mode во второй раз, когда все работает просто великолепно.
Кто-либо знает то, что я делаю неправильно?
Инициализация CEDET устанавливает собственные перехватчики режимов C и C ++. Если он устанавливает ловушку во время выполнения той же ловушки, она не будет работать, и ваш первый буфер не будет инициализирован.
Что вы можете сделать, так это загрузить CEDET при запуске, но затем запустить помощники кода в обработчике режима C. Таким образом, режим C ++ будет инициализирован с помощью mode-local, но дополнительные функции будут установлены после запуска ловушки, так что это может сработать. Сам я не пробовал.
Я думаю, что режим EDE не медленный, поэтому, вероятно, можно сделать это и во время инициализации.