Emacs24语义补全

4

我正在尝试让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 semantic-analyze-possible-completions时,会出现错误提示:"无法找到std::list的类型"。
有什么建议可以用来调试或修复此问题吗?
1个回答

1
我今天在我的新SSD上安装了全新的Ubuntu 13.04操作系统,以下是我的配置CEDET的步骤(我检查过它可以为std::list提供完整的代码补全)。

基本设置

  1. 获取最新的emacs源码并进行构建。 只需执行以下命令:

    ./configure && make && sudo make install

  2. .emacs中添加 (semantic-mode 1)

以上就是全部设置。

测试

  1. 不加载任何内容运行emacs:

    emacs -q test.cc

  2. 输入代码

    #include <list>

    int main() {
        std::list lst;
        lst.$
        return 0;
    }
    
  3. M-x semantic-mode

  4. 将光标放在$处,M-x semantic-ia-show-variants

故障排除

如果出现问题,很可能是语义数据库已损坏。

只需找到它的位置,对于我来说,semanticdb-default-save-directory =“〜/ .emacs.d / semanticdb”,然后从那里删除所有内容。

然后,在访问源文件时,调用semantic-force-refresh


可能是系统配置的问题。我正在运行CentOS,我尝试了您上面的步骤,但是我得到了相同的错误。在第四步之后,我得到了“无法找到'std :: list lst'的类型”。 - Neal
你是否按照故障排除步骤进行了操作?同时,请确保已启动您所构建的emacs。按下 f1 C-a 可以显示版本信息,它必须是24.3.4版本。 - abo-abo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接