Sublime Text 提供了几种方法来节省输入时间,可以通过补全单词或插入样板代码来实现。代码补全包括以下来源:
当前文件中的单词
上下文感知建议 4050
补全文件
代码片段文件
插件
存在各种设置来自定义代码补全的行为。用户可以编写自己的代码片段或补全文件,并且有许多第三方包可以提供代码补全。
用法
上下文感知建议
4050
补全元数据
4050
自定义
补全文件
代码片段
字段
变量
变量替换
转义
插件
设置
用法🔗
默认情况下,当用户编辑源代码或标记时,Sublime Text 会自动显示代码补全弹出窗口,但在注释、字符串或标记中的散文内不会显示。
按 Esc 键将隐藏代码补全弹出窗口。要手动显示代码补全弹出窗口,请按 Ctrl+空格。 如果没有可用的代码补全,状态栏中将显示消息 无可用代码补全。
上下文感知建议🔗
Sublime Text 中的代码补全引擎使用后台进程扫描项目中的所有文件,以构建代码补全索引。此索引用于根据现有代码中的模式向用户提供建议的代码补全。
一些例子
如果某个属性经常被设置为布尔值,则建议将包括 true 或 false。
如果标识符通常被“调用”,则会建议使用附加了 () 的名称。
提供的具体代码补全基于各种启发式方法,并来自项目中的现有代码。 由于代码补全是基于对现有代码的分析,因此不会建议项目中未使用的单词。
4050
补全元数据🔗
除了文本内容之外,代码补全还可以向用户提供其他详细信息。这些信息包括代码补全表示的元素的*类型*、一个简短的*注释*以帮助选择代码补全,以及可能包含指向其他资源的链接的*详细信息*。
类型信息
f
apply()
s
application
m
absolute()
s
acls
抽象类
注释
c
agent
结构体 2 个定义
详细信息
类型信息🔗
代码补全可以提供*类型*信息,以便与代码补全触发器一起显示。这包括一个高级类别、一个标识字母和一个名称。以下是一些最常见的类型:
图标
名称
k
关键字
t
类型
f
函数
a
命名空间
n
导航
m
标记
v
变量
s
代码片段
在本说明文档和 Sublime Text 中,将鼠标悬停在类型字母上将显示一个包含完整名称的工具提示。类型元数据的颜色由主题决定,可能与上面显示的不同。
.sublime-completions 文件和插件可以使用上面列出的任何类别的组合,以及任何 Unicode 字符和名称来进行自定义显示。
注释🔗
注释显示在代码补全弹出窗口的右侧边缘,可能包含作者认为有用的任何信息。通常,注释只有一两个字。
详细信息🔗
代码补全的 details 字段可能包含带有链接的富文本描述。当选择代码补全时,代码补全的详细信息将显示在代码补全弹出窗口的底部。
4050
自定义🔗
有许多方法可以使用新的代码补全来增强引擎的功能:
补全文件
代码片段
插件
完成文件🔗
向 Sublime Text 添加自动完成的最基本形式是创建一个 .sublime-completions 文件。自动完成文件使用 JSON 格式,并包含一个带有 "scope" 和 "completions" 键的对象。
"scope" 键的值是一个字符串,其中包含自动完成适用的语法的 选择器。"completions" 值是一个自动完成数组。数组中的每个条目都表示一个自动完成,可以是字符串或对象。
简单格式🔗
当自动完成是一个字符串时,该字符串同时表示触发文本和自动完成内容。
一个基本的 .sublime-completions 文件
{
"scope": "source.python",
"completions": [
"def",
"class",
"None",
"True",
"False"
]
}
丰富格式🔗
当自动完成是一个对象时,有效的键包括
"trigger" 字符串 (必填)🔗
用户必须输入以匹配自动完成的文本。
"contents" 字符串 (必填)🔗
将插入到文件中的内容。支持代码片段 字段 和 变量。
"annotation" 字符串🔗
4073
要为自动完成显示的注释。
"kind" 字符串, 3 个字符串的数组🔗
4073
自动完成的类型元数据。
如果该值是一个字符串,则它必须是以下之一
"ambiguous"
"function"
"keyword"
"markup"
"namespace"
"navigation"
"snippet"
"type"
"variable"
示例: "kind": "function"
如果该值是一个包含 3 个字符串的数组,则它们必须是
上面列表中的一个字符串,主题使用它来选择类型元数据的颜色
要显示在触发器左侧的单个 Unicode 字符
类型的描述,可在类型字母工具提示和详细信息窗格(可见时)中查看
示例: "kind": ["function", "m", "Method"]
"details" 字符串🔗
4073
自动完成的单行描述。可以包含以下 HTML 标签以进行基本格式化
除上面列出的内容外,不支持任何其他属性或标签。
示例: "details": "使用 <b>
标签包裹选区"
一个包含每个字段示例的 .sublime-completions 文件
{
"scope": "source.python",
"completions": [
{
"trigger": "def",
"contents": "def",
"kind": "keyword"
},
{
"trigger": "fun",
"annotation": "basic function",
"contents": "def ${1:name}($2):\n $0\n",
"kind": "snippet",
"details": "A simple, non-async
function definition"
}
]
}
代码片段🔗
代码片段通常用于样板类型的内容,这些内容由于跨越多行,因此不容易使用 .sublime-completions 格式编写。
代码片段是扩展名为 .sublime-snippet 的 XML 文件。它们有一个顶级标签
scope
应为其启用代码段的语法的 选择器
tabTrigger
用于在完成弹出窗口中匹配代码段的文本
contents
应用代码段时要插入到文档中的文本。支持代码段 字段 和 变量。
通常,此标签的内容包含在 中,因此内容不需要进行 XML 转义。
description
代码段的可选描述,显示在“命令面板”中。
示例 .sublime-snippet 文件
${0:pass}]]>
字段🔗
代码片段支持“字段”,即用户在插入代码片段后可以按 Tab 键遍历的代码片段中的位置。字段可以是简单的位置,但也可以提供默认内容。
简单字段是一个 $ 后跟一个整数。字段 $0 是完成代码段后选择将放置的位置。字段 $1 到 $n 在移动到 $0 之前都会被填充。
Name: $1
Email: $2
Description: $0
具有默认内容的字段使用格式 ${1:default text}。默认内容可以是文本,也可以包含 变量。
Name: ${1:first} ${2:last}
Email: ${3:user}@${4:example.com}
如果代码段不包含字段 $0,则会在末尾隐式添加它。
变量🔗
以下变量可以添加到代码段中,以包含来自插入代码段的文件的信息
变量
描述
$SELECTION
当前选择
$TM_SELECTED_TEXT
当前选择
$TM_LINE_INDEX
当前行的从 0 开始的行号
$TM_LINE_NUMBER
当前行的从 1 开始的行号
$TM_DIRECTORY
包含文件的目录的路径
$TM_FILEPATH
文件的路径
$TM_FILENAME
文件的文件名
$TM_CURRENT_WORD
当前单词的内容
$TM_CURRENT_LINE
当前行的内容
$TM_TAB_SIZE
每个制表符的空格数
$TM_SOFT_TABS
YES 或 NO - 如果制表符应转换为空格
$TM_SCOPE
文件语法的基本范围名称
除了上面命名的变量之外,字段也可以用作变量,允许用户输入单个值并在多个地方重复使用它。
Name: ${1:first} ${2:last}
Email: ${3:$1}@${4:example.com}
变量替换🔗
可以直接引用变量,也可以使用正则表达式修改变量。带有替换的变量以 ${name/regex/replace/flags} 格式编写。
“regex”段支持 正则表达式。“replace”段支持相应的 替换格式。“flags”段将包含以下字母中的零个:
g - 应替换所有匹配项,而不仅仅是第一个匹配项
i - 不区分大小写匹配
m - 多行模式,其中 ^ 匹配每行的开头
通常情况下,变量替换会与引用字段的数字变量结合使用。
以下示例使用第一个字段作为第二个字段的默认内容,删除第一个空格及其后的所有内容
Name: ${1:name}
Email: ${2:${1/\s.*//}}@${3:example.com}
转义🔗
由于代码片段可以包含以 $ 开头的变量,因此文本 $ 字符必须写成 \$。
执行变量替换时,文本 / 字符必须写成 \/。*
插件🔗
添加补全的最强大的工具是 Python 插件。
编写插件以提供补全涉及实现 EventListener.on_query_completions() 或 ViewEventListener.on_query_completions()。
import sublime
import sublime_plugin
class MyCompletions(sublime_plugin.EventListener):
def on_query_completions(self, view, prefix, locations):
if not view.match_selector(locations[0], "source.python"):
return []
available_completions = [
"def",
"class",
"None",
"True",
"False"
]
prefix = prefix.lower()
out = []
for comp in available_completions:
if comp.lower().startswith(prefix):
out.append(comp)
return out
on_query_completions() 可以通过返回 sublime.CompletionList 对象来提供异步补全。
补全详细信息(包括种类元数据)由 on_query_completions() 返回 sublime.CompletionItem 对象提供。
4050
设置🔗
"tab_completion" 布尔值🔗
启用后,按 Tab 键将插入最佳匹配的补全。禁用后,Tab 键将仅触发代码片段或插入制表符。启用 tab_completion 后,可以使用 Shift+Tab 插入显式制表符。
禁用此设置不会隐式禁用 auto_complete。
"auto_complete" 布尔值🔗
键入时自动显示补全弹出窗口。
此行为不受设置 tab_completion 的影响。
"auto_complete_size_limit" 整数🔗
如果当前文件的字节大小大于此值,则不会自动显示补全弹出窗口。
"auto_complete_delay" 整数🔗
自动显示补全弹出窗口之前的等待时间(以毫秒为单位)。
"auto_complete_selector" 字符串🔗
选择器,用于限制自动显示补全弹出窗口的时间。
示例: "meta.tag, source - comment - string.quoted.double.block - string.quoted.single.block - string.unquoted.heredoc"
"auto_complete_triggers" 设置可用于在特定情况下重新启用自动补全弹出窗口。
"auto_complete_triggers" 对象数组🔗
提供何时自动显示自动完成弹出窗口的显式触发器。
每个对象必须包含键 "selector",其字符串值包含要与插入符号位置匹配的 选择器,以及一个 "characters" 键,其字符串值指定插入符号左侧必须存在的字符。
示例
[
{
"selector": "text.html",
"characters": "<"
}
]
触发器将覆盖设置 auto_complete_selector。
"auto_complete_commit_on_tab" 布尔值🔗
默认情况下,自动完成功能在按下 Enter 时提交当前完成的内容。此设置可用于使其在按下 Tab 时完成。
在 Tab 上完成通常是更好的选择,因为它消除了提交完成内容和插入换行符之间的歧义。
"auto_complete_with_fields" 布尔值🔗
控制在代码段字段处于活动状态时是否自动显示自动完成弹出窗口。仅在启用 auto_complete_commit_on_tab 时才相关。
"auto_complete_cycle" 布尔值🔗
控制在选中自动完成弹出窗口中的第一项时按下 ⬆ 会发生什么:如果为 false,则隐藏弹出窗口,否则选中弹出窗口中的最后一项完成内容。
还会导致在最后一项完成内容上按下 ⬇ 时选中第一项完成内容。
"auto_complete_use_history" 布尔值🔗
是否应自动选择以前选择的完成内容。
"auto_complete_use_index" 布尔值🔗
4052
启用后,自动完成弹出窗口将根据项目中的其他文件显示上下文相关的建议。
"auto_complete_preserve_order" 字符串🔗
4052
控制在键入时如何对自动完成结果重新排序
"none" – 根据完成内容与键入文本的匹配程度完全重新排序结果
"some" – 部分重新排序结果,同时考虑完成内容与键入内容的匹配程度以及完成内容的可能性
"strict" – 从不重新排序结果
"auto_complete_trailing_symbols" 布尔值🔗
4050
如果完成引擎认为尾随符号(例如,.、())的可能性足够大,则添加它们。
"auto_complete_trailing_spaces" 布尔值🔗
4050
如果完成引擎认为完成内容后跟空格的可能性足够大,则添加空格。
"auto_complete_include_snippets" 布尔值🔗
4050
控制是否在自动完成弹出窗口中包含代码段。
当禁用时,仍然可以通过键入代码段的触发器并在完成弹出窗口未显示时按 Tab 键来触发代码段。
"auto_complete_include_snippets_when_typing" 布尔值🔗
.. since:: 4052
当此设置为 false 时,代码段不会出现在自动触发的完成弹出窗口中。如果手动触发,它们将显示。
"ignored_snippets" 字符串 数组🔗
4050
文件模式 指定要忽略的代码段文件。
例如,要忽略所有默认的 C++ 代码段
[
"C++/*"
]