我认为emacs默认完成和语义完成都基于相同的标记文件完成它们的工作,但现在我看到了其他东西:
这是 emacs 默认通过 ESC + TAB 完成的结果:
这是语义完成的结果:
这是怎么回事?!他们不使用相同的标签文件吗?如何找到正在使用的标签文件?
我认为emacs默认完成和语义完成都基于相同的标记文件完成它们的工作,但现在我看到了其他东西:
这是 emacs 默认通过 ESC + TAB 完成的结果:
这是语义完成的结果:
这是怎么回事?!他们不使用相同的标签文件吗?如何找到正在使用的标签文件?
有多个标签表,以及扫描标签表的多种方式。
我做到了: 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
,包括可用于提高智能补全过滤质量的数据类型和参数。