1

我认为emacs默认完成和语义完成都基于相同的标记文件完成它们的工作,但现在我看到了其他东西:

这是 emacs 默认通过 ESC + TAB 完成的结果: 在此处输入图像描述

这是语义完成的结果:

在此处输入图像描述

这是怎么回事?!他们不使用相同的标签文件吗?如何找到正在使用的标签文件?

4

1 回答 1

2

有多个标签表,以及扫描标签表的多种方式。

我做到了: C-h k M-TAB它说:

Perform tags completion on the text around point.
If a tags table is loaded, call `complete-tag'.
Otherwise, if Semantic is active, call `semantic-ia-complete-symbol'.

Complete-tag 使用来自 etags 的标签表。它可能是一个名为 的文件TAGS,如果您以前曾经M-.跳转到一个标签,它将使用它。

然后它尝试使用列出的语义功能。首先尝试使用“智能完成”。这基本上意味着它将分析本地上下文,并尝试找出一个简短的智能选项列表,按数据类型等过滤。如果失败,它将访问限制在当前文件中的语义标签表的其余部分,以防止符号过载。Semantic 的标签在 ~/.semanticdb 中,通过目录命名的文件保存。这些表也用于智能补全,其中包含比 更多信息TAGS,包括可用于提高智能补全过滤质量的数据类型和参数。

于 2012-12-15T13:34:19.060 回答