我正在尝试使用 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 的类型”
关于如何调试或修复它有什么建议吗?
我今天在我的新 SSD 上安装了新的 Ubuntu 13.04,
这是我配置 CEDET 的步骤(我检查它是否提供了完成std::list
).
基本设置
-
来一份新鲜的emacs http://ftpmirror.gnu.org/emacs/并从源代码构建它。
这很简单
./configure && make && sudo make install
Add to .emacs
(语义模式 1)
这就是整个设置。
Testing
-
运行 emacs 而不加载任何东西:
emacs -q test.cc
-
输入代码
#include <list>
int main() {
std::list lst;
lst.$
return 0;
}
M-x semantic-mode
- with point at
$
, M-x semantic-ia-show-variants
故障排除
如果东西不起作用,则语义数据库可能已损坏。
只要找到它在哪里,对我来说就是semanticdb-default-save-directory
="~/.emacs.d/semanticdb",
并从那里删除所有内容。
然后,当访问源文件时,调用semantic-force-refresh
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)