3

我想让emacs在使用结构时只列出有效的自动完成选项。例如,考虑以下结构:

typedef struct      
{  
    int length, width, area;  
} SquareType;

SquareType *square;

当我输入时square->,我希望弹出一个菜单,显示有效的结构成员。

目前,在我的 .emacs 文件中有以下内容,只有当我在 .emacs 之后键入另一个字符时才会显示弹出菜单->。此外,当前菜单列出了不是我的结构的有效成员的完成选项。

(require 'yasnippet)  
(require 'auto-complete-config)  
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")  
(ac-config-default)  
4

1 回答 1

2

看来您需要的是 CEDET/语义。它已经内置在新的 Emacs 版本中。它进行代码分析,因此它会向您显示结构的有效成员。

  1. 启用语义(semantic-mode 1)
  2. 调用semantic-analyze-possible-completions以显示完成
  3. 我用emacs -qEmacs 24.3.1 对此进行了测试——它有效。

还有semantic-ia-complete-symbol很多您可能感兴趣的其他功能。

尽管auto-complete-mode确实有 feature ac-source-semantic,并且它可以满足您的要求,但我不推荐它。它的一个问题是,ac-source-semantic这只是众多来源之一,因此您的案例将获得比 3 个更多的候选人。第二个问题是语义有点慢,尤其是auto-complete 在每次击键后不断轮询它时,所以你真的会感觉到响应能力下降。

我只保留我的基础知识ac-sources

(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)

当我需要语义完成时,我只是调用它C-o 来获取有效的候选人。

我还在 github 上维护了一个存储库,其中包含我对语义的添加。 如果您想尝试它,则调用完成函数moo-complete。只需将其绑定C-o并尝试一下。

于 2013-07-20T16:08:27.847 回答