Семантическое завершение emacs24
Я пытаюсь получить семантические дополнения, работая с emacs 24 и версией cedet, которая идет с ним. Завершения работают для классов, которые я определил в своем собственном исходном файле, но завершение не работает для стандартной библиотеки или STL. Вот моя конфигурация emacs:
(require 'cedet)
(require 'semantic)
(require 'semantic/ia)
(require 'semantic/bovine/gcc)
(semantic-add-system-include "/usr/include/c++/4.6.3" 'c++-mode)
(setq semantic-default-submodes
'(global-semantic-idle-scheduler-mode
global-semanticdb-minor-mode
global-semantic-idle-summary-mode
global-semantic-idle-completions-mode
global-semantic-highlight-func-mode
global-semantic-decoration-mode
global-semantic-mru-bookmark-mode))
(setq semanticdb-default-save-directory "~/.semanticdb/"
semantic-complete-inline-analyzer-idle-displayor-class 'semantic-displayor-ghost)
(semantic-mode t)
В моем каталоге ~/.semanticdb я вижу только "! Usr! Include! C++!4.6! X86_64-linux-gnu! Bits! Semantic.cache", который даже не использует версию, указанную в конфигурации.
Когда я, например, пытаюсь выполнить Mx semantic-analysis-возможных-дополнения в std::list, я получаю сообщение об ошибке: "Не удается найти типы для std::list"
Любые предложения о том, как отладить это или как это исправить?
1 ответ
Сегодня я устанавливал свежую Ubuntu 13.04 на мой новый SSD, и вот мои шаги по настройке CEDET (я проверил, что он дает дополнения для std::list
).
Базовая настройка
Получить свежий Emacs и собрать его из исходного кода. Это так же просто, как
./configure && make && sudo make install
добавить в
.emacs
(семантический режим 1)
Вот и все настройки.
тестирование
Запустите emacs без загрузки чего-либо:
emacs -q test.cc
введите код
#include <list>
int main() { std::list lst; lst.$ return 0; }
Mx
semantic-mode
- с точкой на
$
, Мксsemantic-ia-show-variants
Поиск проблемы
Если что-то не работает, вполне вероятно, что semanticdb поврежден.
Просто найдите, где это, для меня это semanticdb-default-save-directory
="~/.emacs.d/semanticdb" и удалите все оттуда.
Затем, при посещении исходного файла, позвоните semantic-force-refresh
,