跳至内容

代码补全

秉承 IDE 的精神,Sublime Text 在您编写代码或内容时会提供代码补全建议,通过捕获您输入的所有内容,例如变量名。

但是,有多种方法可以扩展代码补全列表(例如,根据当前语法)。

本主题将介绍代码补全的使用方式及其来源。

如何使用代码补全

使用代码补全有两种方法。虽然在筛选代码补全时,优先级始终保持一致,但两种方法会产生不同的结果。

代码补全可以通过两种方式插入

  • 通过代码补全列表 (Ctrl ),或

代码补全列表

要使用代码补全列表

  1. Ctrl  或直接输入一些内容。
  2. 可选地,再次按 Ctrl  选择下一个条目,或使用箭头键。
  3. 确认选择(取决于 auto_complete_commit_on_tab 设置)。
  4. 可选地,重复按 插入下一个可用的代码补全。

注意

如果代码补全列表是显式打开的,则也可以使用任何不绑定到代码片段的标点符号(例如 .)来确认代码补全列表中的当前选择。

当代码补全候选列表可以根据当前前缀缩减为一个明确的选择时,此代码补全将在您触发代码补全列表的那一刻自动确认。

提示

此外,您可能会在代码补全列表中代码补全触发器的右侧看到一个触发提示。这可以作为代码补全内容的预览。

image

上面的实际上是一个代码片段,扩展为 $arrayName = array('' => , );

触发器和内容

不是从当前文件中的文本中获取的代码补全可能会提供一个与它们插入的内容不同的触发器。这通常用于函数代码补全,其中内容还包括函数的签名。

例如,从 PHP 代码补全中完成 array_map 将导致 array_map({callback}, {arr1})

image

您可能会注意到动画中光标自动选择了callback。这是因为补全支持与带有字段和占位符的代码段相同的特性。有关更多详细信息,请参阅代码段特性

具有多个光标的补全

Sublime Text 也可以处理具有多个光标的补全,但只有当所有光标在当前光标位置和最后一个单词分隔符字符(例如.或换行符)之间共享相同的文本时,才会打开补全列表。

工作示例(| 代表一个光标)

l|
some text with l|
l| and.l|

不工作示例

l|
some text with la|
l| andl|

选择基本上被忽略,只有光标的位置很重要。因此,e|[-some selection] example,其中| 是光标,[...] 是当前选择,将完成为example|[-some selection] example

-完成补全

如果您希望能够使用 Tab 键完成补全,则设置tab_completion必须设置为true(默认值)。代码段 Tab 键完成不受此设置的影响:它们将始终根据其 Tab 键触发器完成。

启用tab_completion后,项目的补全始终是自动的。这意味着,与补全列表不同,Sublime Text 将始终为您做出决定。选择最佳补全的规则与上面描述的相同,但如果出现歧义,Sublime Text 将插入它认为最合适的项目。您可以多次按下键以遍历其他可用选项。

插入文字 Tab 键字符

启用tab_completion后,您可以按下 键以插入文字 Tab 键字符。

补全来源及其优先级

以下是用户可以控制的补全来源,按优先级排序

  1. 代码片段
  2. 通过on_query_completions注入的 API 补全
  3. 补全文件

此外,以下补全将折叠到最终列表中

  1. 缓冲区中的单词

当当前前缀与代码段的 Tab 键触发器完全匹配时,代码段将始终获胜。对于其他补全来源,将执行模糊匹配。此外,代码段在模糊匹配中始终失败。

当显示补全列表时,代码段仍将与其他项目一起列出,即使前缀仅部分匹配代码段的 Tab 键触发器。

注意

可以从on_query_completions事件钩子中明确抑制来自缓冲区中单词的补全。

自动补全触发器和选择器

Sublime Text 为用户和包作者提供了两个设置来调整其自动补全行为。这两个设置相互独立工作,任何一个都可以触发自动补全弹出窗口。

  • auto_complete_selector期望一个范围选择器,当匹配时,会为任何非标点符号字符(即标识符)打开自动补全弹出窗口。默认配置会为专注于纯文本、注释和字符串的语法禁用此功能。

    在 4070 之前,选择器应用于刚刚键入的字符后的位置。

  • auto_complete_triggers期望一个映射列表,该列表可以指定应触发自动补全弹出窗口的characters和/或范围selector。如果两者都提供,则两者都必须匹配。

    此外,可以提供一个rhs_empty布尔值,该值表示插入符号的右侧必须为空或为空格字符。它默认为false

包作者可能希望在特定于语法的设置文件中配置触发器和/或选择器。