我正在尝试使用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”,它甚至没有使用我在配置中指定的版本。
例如,当我在std :: list上尝试M-x语义分析 - 可能 - 完成时,我收到一条错误说:“找不到std :: list的类型”
有关如何调试此内容或如何解决此问题的任何建议?
答案 0 :(得分:1)
我今天在我的新SSD上安装了一个新的Ubuntu 13.04,
以下是配置CEDET的步骤(我检查了它是否为std::list
提供了完成)。
获取一个新的emacs并从源代码构建它。 它就像
一样简单./ configure&&制造&& sudo make install
添加到.emacs
(语义模式1)
这就是整个设置。
运行emacs而不加载任何内容:
emacs -q test.cc
输入代码
#include <list>
int main() {
std::list lst;
lst.$
return 0;
}
M-x semantic-mode
$
, M-x semantic-ia-show-variants
如果内容不起作用,则可能是semanticdb已损坏。
找到它的位置,对我而言semanticdb-default-save-directory
=“〜/ .emacs.d / semanticdb”,
并从那里删除所有内容。
然后,在访问源文件时,请致电semantic-force-refresh
。