很长一段时间以来,我一直在努力让标签在自动完成模式下工作,而且我的尝试似乎是徒劳的。
我有两个问题:
- 如何判断自动完成模式是否适用于 gtags?
- 如何设置 gtags 以使用自动完成功能?(包括我需要在 emacs 之外完成所有设置的步骤。)
这是我的情况:
我有一个相对较大的代码库,我想用 gtags 对其进行索引,然后在我的自动完成中使用 gtags 来获取代码提示。源代码中有很多级别的目录,但它们都属于我生成 gtag 的根目录。
据我了解,如果我的一切设置正确,我应该能够输入几个字母,如果源位于 gtags 索引的目录中,则可以根据 gtags 自动完成。例如,如果我已将 gtags(通过gtags
从命令行调用)保存在根目录中,如下所示:
Root_Project_Dir
├── GPATH
├── GRTAGS
├── GSYMS
├── GTAGS
│
├── Folder1
│ └──my_structs.h
├── Folder2
└──some_code.cpp
my_structs.h 的定义如下...
struct testStruct{
int a;
char blah_blah;
double context;
};
那么这意味着如果我在 some_code.cpp 中定义这个结构,自动完成可能会尝试在 .cpp 源中完成我的结构。这个对吗?换句话说,如果我定义testStruct mystruct = new testStruct();
了那么下次我调用类似“ mystruct->
”的东西时,自动完成对话框应该弹出结构的成员吗?
我的玩具 .emacs 文件具有以下基本自动完成设置(以及正确的加载路径)。它似乎能够从工作目录中识别和自动完成代码。但是,它似乎不知道源当前所在目录之外的任何内容。
;; auto-complete stuff
require 'auto-complete)
(require 'auto-complete-config)
(ac-config-default)
(defun ac-common-setup ()
(setq ac-sources (append ac-sources '(ac-source-gtags))))
我在互联网上看了很多,但我还没有真正找到任何解决方案。我看到了这篇文章,但解决方案只是说添加 ac-source-gtags。我想我需要更多的指导才能使事情正常进行,因为我对 elisp 不太熟悉。