emacs24语义完成

时间:2013-01-12 16:48:49

标签: emacs cedet

我正在尝试使用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的类型”

有关如何调试此内容或如何解决此问题的任何建议?

1 个答案:

答案 0 :(得分:1)

我今天在我的新SSD上安装了一个新的Ubuntu 13.04, 以下是配置CEDET的步骤(我检查了它是否为std::list提供了完成)。

基本设置

  1. 获取一个新的emacs并从源代码构建它。 它就像

    一样简单

    ./ configure&&制造&& sudo make install

  2. 添加到.emacs (语义模式1)

  3. 这就是整个设置。

    测试

    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
    5. 故障排除

      如果内容不起作用,则可能是semanticdb已损坏。

      找到它的位置,对我而言semanticdb-default-save-directory =“〜/ .emacs.d / semanticdb”, 并从那里删除所有内容。

      然后,在访问源文件时,请致电semantic-force-refresh