Sublime Text 非官方文档(中文翻译版)

本文档翻译自 Sublime Text Unofficial Documentation,译文如下:

关于本文档

欢迎来到Sublime Text编辑器的非官方文档!

_images/sample-intro.png

Sublime Text 是一款为编写代码和文稿而准备的多功能编辑器。它能为你做很多重复性的工作,从而让你的精力更专注在编写的内容上面。更重要的是,它会给你带来愉悦感!它适用于OS X,Windows和Linux。

在你继续阅读之前,我们鼓励你通读一下 基本概念 章节。

学的开心哦!

贡献文档

如果您想参与此文档,请转到 GitHub仓库。本指南是使用 Sphinx 创建的。

安装

在不同平台上有不同的Sublime Text安装过程。

Sublime Text并不是免费的,使用前请务必阅读官方网站上的 使用条约

32位还是64位?

请根据操作系统的不同,做出对应选择。如果你正在使用64位的系统,就请下载64位的版本,否则就下载32位的版本。

macOS

对于OS X的用户,你不必关心此部分内容,因为Sublime Text在OS X平台上只有一个版本。

Windows

如果您使用的是现代版Windows,则应该能够运行64位版本。如果您在运行64位版本时遇到问题,请尝试使用32位版本。

Linux

在Linux平台,请在终端中输入下面的命令来查看操作系统的类型:

uname -m

Windows

选择便携版还是非便携版?

Sublime Text在Windows平台提供了两种安装类型:一种是标准安装,另外一种则是便携安装。只有当你确信自己要使用便携版的时候才选择便携安装,否则就请选择标准安装。

标准安装 会将数据分散到两个文件夹:正确的安装目录,以及 数据目录 。这些概念将在稍后的文档中进行解释。标准安装也会将Sublime Text的选项与Windows的快捷菜单进行整合。

便携安装 会将所有Sublime Text需要的文件放到一个目录中。这样你就可以通过介质随身携带这个目录,而编辑器仍然可以正常工作。

如何安装标准版的Sublime Text

很简单,下载安装器,双击运行,然后跟着屏幕上的指令一步一步操作就可以了。

如何安装便携版的Sublime Text

下载压缩包,并将其中的内容解压到你选择的路径。你能在解压的路径中找到 sublime_text.exe 的可执行文件。

macOS

下载并打开 .dmg 文件,将其中的Sublime Text 3拖拽到 应用程序 文件夹即可。要创建可以在命令行使用的 符号链接,请在终端输入以下命令:

ln -s  "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Linux

你可以下载软件包并手动解压缩。或者,你可以使用命令行。

Ubuntu

对于i386

cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3083_i386.deb

对于x64

cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3083_amd64.deb

其他Linux发行版

对于i386

cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3083_x32.tar.bz2
tar vxjf sublime_text_3_build_3083_x32.tar.bz2

对于x64

cd ~
wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3083_x64.tar.bz2
tar vxjf sublime_text_3_build_3083_x64.tar.bz2

现在我们应该将解压缩后的文件移动到适当的位置。

sudo mv Sublime\ Text\ 3 /opt/

最后,我们创建一个在命令行使用的 符号链接

sudo ln -s /opt/Sublime\ Text\ 3/sublime_text /usr/bin/sublime

在Ubuntu中,如果你还想将Sublime Text添加到Unity luncher,请继续阅读。

首先,我们需要创建一个新文件。

sudo sublime /usr/share/applications/sublime.desktop

然后将以下内容复制到其中。

[Desktop Entry]
Version=1.0
Name=Sublime Text 3
# Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
# From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
GenericName=Text Editor

Exec=sublime
Terminal=false
Icon=/opt/Sublime Text 3/Icon/48x48/sublime-text.png
Type=Application
Categories=TextEditor;IDE;Development
X-Ayatana-Desktop-Shortcuts=NewWindow

[NewWindow Shortcut Group]
Name=New Window
Exec=sublime -n
TargetEnvironment=Unity

如果你已经注册了Sublime Text的副本,但每次打开它时都会要求你输入许可证,你应该尝试运行此命令。

sudo chown -R username:username /home/username/.config /sublime-text-3

只需用你帐户的用户名替换 username 即可。如果你在首次输入许可证时以root身份打开Sublime Text,则应该修复权限错误。

发布通道

在撰写本文时,存在两个主要版本的Sublime Text:Sublime Text 2和Sublime Text 3。一般来说,Sublime Text 3是更好的选择。虽然它在技术上处于测试阶段,但它与Sublime Text 2一样稳定,并且具有更多功能。

仅当你发现运行Sublime Text 3有问题或依赖的任何软件包不适用于Sublime Text 3时,才建议使用Sublime Text 2。

获得Sublime Text 3

Sublime Text 3目前有两个发布 通道

与开发版本相比,Beta版本 在日常使用中经过了更好的测试且更可靠。大多数用户应该只使用Beta版

开发 通道不稳定:开发版可能包含错误而无法可靠地工作。Dev版本比beta版本更常更新。

Dev版本仅适用于注册用户

获得Sublime Text 2

我们推荐Sublime Text 3, 但如果你选择使用Sublime Text 2 你可以在 这里 下载它。

基本概念

概览

这里我们将解释一些基本概念,只有在熟悉这些概念后,你才能彻底理解这份文档的所有内容。

一般公约

这份文档是从Windows用户的角度撰写的,但是文档中提到的大部分内容只需要很小的变化就能在其他平台正常工作。

除非特别说明,否则文档中所有的相对路径(例如 Packages/User)都是相对于 数据目录 的。后文将解释 数据目录 的含义。

在介绍快捷键的时候,我们假定你正在使用系统默认的按键设定。由于Submline Text按键与命令映射的工作方式,有些按键组合可能与你正在使用键盘的布局不同

能力越大,需要处理的问题也就越多

Sublime Text是一款高度可扩展、可定制的文本编辑器。它已经为你提供了许多直接使用的功能,尽管如此,如果你愿意花时间根据自己的需求进行配置,ST将为你提供超高的生产力。本文档将介绍你所需要知道的配置Sublime Text的一切内容。

我们将在接下来的几段中,简单说明一些有关Sublime Text的内容,这些内容只有在使用这个编辑器一段时间后才能被真正理解。请不断地探索这个编辑器,同时也经常来翻翻这个文档,总有一天文档中的所有内容你都会烂熟于心。

不可否认,Sublime Text是码农的神器(译者注:据说是网页前端神器),尽管如此你没必要一定要是程序员才能使用它,即使你不做任何配置,你也会发现这是你写作工作的一个完美工具。当然了,如果你是一名黑客,那么你很有可能会把今天剩下的时间都用在探索这个编辑器上了。

Data(数据) 目录

Sublime Text把几乎所有用户感兴趣的内容都存放在所谓的数据目录下。这个目录的位置是平台相关的:

  • Windows平台: %APPDATA%\Sublime Text 3
  • OS X平台: ~/Library/Application Support/Sublime Text 3
  • Linux平台: ~/.config/sublime-text-3

对于使用 portable installations(便携安装版) 的用户,数据目录的位置则是 Application/Data 。这里 Application 部分指的是你把包含Sublime Text的压缩包解压的位置。

需要注意的是,虽然被称作 Data 目录,但只有便携安装版的用户,才能真正找到一个叫 Data 的目录。对于其他类型的安装方式,数据目录的位置请参考上面的说明。

Packages(包组) 目录

这是一个 关键目录 :编辑器所支持的编程或标记语言的所有资源都被存放在这里。一个存放对Sublime Text而言有意义文件的文件夹就被叫做一个

你可以通过Sublime Text的菜单来访问这个目录(Preferences | Browse Packages…),也可以通过调用 sublime.packages_path() 这个API来访问。在本文档中,我们使用 包组包组路径包组文件夹 以及 包组目录 来指代这个文档。

User(用户)

Packages/User 这个目录是一个存放所有用户自定义的插件、代码片段、宏等等的大杂烩。请把这个目录看成是你在包组目录中的私人领地。Sublime Text 2在升级的过程中永远不会覆盖 Packages/User 这个目录中的内容。

Sublime Text是可编程的

这部分信息对码农来说格外有趣。而对于其他的Sublime Text用户来说,你只需要知道Sublime Text允许会编程的人为这个编辑器添加他们自己需要的功能。(所以赶紧去学学编程吧,真的很有趣!)

( 译者注:小伙子,干什么不好非要当码农,此间慎入! ;) )

Sublime Text自带了一个内嵌的Python解释器。这对于检视Sublime Text的各种设置项,以及 在开发插件过程中快速简单测试API调用的效果来说都是非常有用的!

只需按下组合件 Ctrl+` 或者从菜单中选择 View | Show Console,就能呼出Python控制台。

这是Sublime Text中的Python控制台:

_images/basic-concepts-console.png

有点听迷糊了?咱们再说一些背景知识吧:

Python 是一门对初学者而言非常容易上手,同时又具有强大能力的编程语言。 而 API 则是对‘Application Programming Interface(应用程序编程接口)’的缩写,这实际指的是Sublime Text为用户准备的可以配置它的方式。换句话说,Sublime Text通过Python这门语言为用户提供了访问其内部的方式。最后需要说明的是 控制台,它是Sublime Text内部的一个可以输入并运行Python代码片段的小窗口。控制台同时也负责显示由Sublime Text以及相关插件输出的文本信息。

操作系统中的Python vs Sublime Text 2内嵌的Python

Windows 以及 Linux 平台,Sublime Text的Python解释器是完全与系统的Python解释器分离的。

而在 OS X 平台上,Sublime Text使用的则是系统的Python解释器。这就导致对系统Python解释器版本所做的修改,可能会对Sublime Text造成影响。比如使用MacPorts提供的解释器替换系统默认的解释器,就可能造成一些问题。

这个内嵌的解释器只是为了与插件API作交互,并不应该用来进行通用Python应用的开发。

包组,插件,资源以及其他你现在可能并不理解的东西

就目前而言,你只需要记住Sublime Text中几乎所有的东西都能根据你的需求作调整。这种巨大的灵活性解释了你为什么要学如此多种类型的配置文件——总得有个地方记录你的设置吧!

Sublime Text中的配置文件允许你调整编辑器的表现,添加宏和代码片段,以及创造更多新的特性,注意这里的 特性 指的是 ‘你能想到的一切’。好吧,也许 一切 说的有点夸张了,但是Sublime Text绝对为你提供了巨大的控制权。

这些配置文件就是一些遵循特定结构或 格式 的文本文件:在配置文件中,JSON文件占主导地位,有时你也会发现一些XML文件。

在本文档中,我们把这些完全不同的配置文件总体的称为 资源 。Sublime Text会在包组路径中寻找这些资源。为了让文件夹结构不显得那么杂乱,编辑器把包含为同一功能服务的各种资源的文件夹称为一个 *包*(举例来说,也许某个包中的资源都是为更快的编写email服务的,亦或都是为某个编程语言服务的)。

Textmate兼容性

这部分信息主要是为从Textmate转型使用Sublime Text的用户准备的。Textmate,它是Mac平台的一个编辑器。

(译者注:Textmate是Mac平台很成功的一款编辑器)

除了命令有些差距之外,Sublime Text 2与Textmate的bundles(包)能较好的兼容。更进一步的说,为了识别为TM编写的bundles,Sublime Text要求所有的语法定义文件都包含 .tmLanguage 扩展名,并且所有的配置文件都有 .tmPreferences 扩展名。这意味着即使 .plist 文件保存在 Syntaxes*或者 *Preferences 目录下,它们也会被忽略。

模拟vi/Vim

此信息对于正在使用Sublime Text的Vim用户非常有用。vi是一个古老的模式编辑器,允许用户通过键盘执行所有操作。Vim是vi的现代版本,现在仍在广泛使用。

Sublime Text通过名为 Vintage 的包来模拟vi的操作方式。默认情况下Vintage包是被 忽略 的。请阅读 Vintage 的官方文档来了解更多内容。

Vintage的进化版名为Vintageous,提供更好的vi/Vim编辑体验,并且比Vintage更新。Vintageous是一个开源项目。

模拟emacs

此信息对于正在使用Sublime Text的emacs用户非常有用。emacs是程序员的另一个流行编辑器。

Sublime Text不提供任何内置的模拟emacs功能,但你可以尝试使用由其他Sublime Text用户创建的第三方软件包。

编辑

概览

Sublime Text具有多种多样的编辑特性。本主题只简单展示其中的几种。

多重选择

多重选择特性让你可以高效的在文档中进行批量修改。任何对这个特性的赞誉都不为过。接下来我们就展示这么说的原因:

首先选中一些文本,然后按 Ctrl + D 的组合键来 添加更多 实例。如果你想 跳过当前实例,可以按 Ctrl + K, Ctrl + D

如果你按键太快,导致误添加了一个实例,可以用 Ctrl + U取消 对当前实例的选择。

把多重选择的内容扩展到行

使用 Ctrl + L 可以把多重选择的内容从单词扩展到整行。使用 Ctrl + Shift + L 可以把选中的多行文本分成多个独立的行。

(译者注:这里多个独立的行指的是每行末尾都有单独的光标。平时选中多行文字之后只会有一个光标,这时按 Ctrl + Shift + L 后,每一行末尾都有一个光标,可以按左方向键查看效果。这种选择适用于在 每行 都添加/删除相同的内容)

你可以复制多重选择的行到一个单独的缓冲区,在那里编辑他们,并将编辑后的结果贴回到第一个缓冲区。

列选择

你可以选择文件的矩形区域。列选择使用多重选择。

可以在选择中添加或删除文本块。

使用鼠标

Windows

选择块 Right Mouse Button +
添加到选中项 Ctrl + Right Mouse Button +
从选中项里删除 Alt + Right Mouse Button +

Linux

选择块 Right Mouse Button +
添加到选中项 Ctrl + Right Mouse Button +
从选中项里删除 Alt + Right Mouse Button +

macOS

选择块 Right Mouse Button +
添加到选中项 + Right Mouse Button +
从选中项里删除 + + Right Mouse Button +

使用键盘

Windows Ctrl + Alt + Up and Ctrl + Alt + Down
Linux Alt + + Up and Alt + + Down
OS X + + Up and + + Down

文本选择的其他方法

文本选择的方法很多,可以在 Selection 菜单下找到所有可能的选项。下面举几个例子:

  • 选择子单词 (Alt + Shift + <arrow>)
  • 添加对选中文字周围括号的选择 (Ctrl + Shift + M)
  • 添加对选中文字缩进空格的选择 (Ctrl + Shift + J)
  • 添加对选中文字当前域的选择 (Ctrl + Shift + Space)

交换位置

需要调换两个字母甚至两个单词的位置?试试 Ctrl + T 吧。

其他内容

Edit, Selection, FindGoto 菜单中可以找到很多好用的编辑工具。平常你可能只需要其中的部分功能,当你遇到问题的时候看看这些菜单项,也许其他功能能够帮助你解决问题。

搜索和替换

Sublime Text主要有两种搜索方式:

搜索和替换 - 单文件

搜索

按下 Ctrl + F 键就可以打开当前缓冲区的 搜索面板 。搜索面板里的一些选项和搜索动作有着对应的快捷键:

打开搜索面板 Ctrl + F
开/关正则表达式选项 Alt + R
开/关大小写敏感选项 Alt + C
开/关精确匹配选项 Alt + W
查找下一个 Enter
查找上一个 Shift + Enter
查找全部 Alt + Enter

(译者注:关于缓冲区,请参考 词汇表 这个章节)

增量搜索

按下 Ctrl + I 可以打开 增量搜索面板 。与正常的搜索面板相比,唯一的区别在于 ``回车``键的作用:在增量搜索中,按下回车键将选中缓冲区中下一段与搜索条件匹配的文字,并自动关闭面板。一般来说,可以根据个人的喜好来决定是选择增量搜索面板还是普通搜索面板。

打开增量搜索面板 Ctrl + I
开/关正则表达式选项 Alt + R
开/关大小写敏感选项 Alt + C
开/关精确匹配选项 Alt + W
查找下一个 Enter
查找上一个 Shift + Enter
查找全部 Alt + Enter

替换文本

可以通过 Ctrl + H 来打开替换面板。

替换下一个内容 Ctrl + Shift + H
替换全部内容 Ctrl + Alt + Enter

小技巧

搜索文本的其他方法

可以在Goto Anything(快速跳转)(译者注:Ctrl+P 唤出,或者菜单栏-> Goto -> Goto Anything )面板中使用 # 操作符在当前缓冲区中进行搜索。跟在 # 操作符后面的内容将被识别为搜索关键字。

文本搜索的其他快捷键

下面的这些快捷键在搜索面板不可见的情况下仍然有效。

使用最近一次的搜索模式进行前向搜索 F3
使用最近一次的搜索模式进行后向搜索 Shift + F3
使用最近一次的搜索模式进行全搜索 Alt + F3

你还可以根据当前所选内容执行搜索:

使用当前所选内容进行搜索 Ctrl + E
使用当前所选内容进行替换 Ctrl + Shift + E
多行搜索

你可以输入一个多行搜素模式。在搜索面板中使用 Ctrl + 回车 键来输入换行符。值得一提的是,搜索面板的大小是可以调整的。

_images/search-and-replace-multiline.png

多行模式

请注意,搜索面板也可以调整大小。

搜索与替换 - 多文件

用于搜索多个文件的搜索面板称为“在文件中查找”。

搜索

使用 Ctrl + Shift + F 键可以打开多文件搜索面板。搜索面板与搜索动作可以使用快捷键进行操作:

开/关正则表达式选项 Alt + R
开/关大小写敏感选项 Alt + C
开/关精确匹配选项 Alt + W
查找下一个 Enter

搜索作用域

搜索面板中的 Where 字段决定搜索文件的范围。你可以通过以下几种方式来确定文件的搜索作用域:

  • 添加一个独立的目录 (需要使用 Unix风格的文件路径,在Windows平台也是如此)
  • 使用某种模式来添加/删除某些文件
  • 添加链接位置(<open folders>, <open files>)

你可以在一次搜索中组合使用以上确定作用域的方式,并且在不同方式之间用逗号分隔。

_images/search-in-files-with-filters.png

Combining Where scopes in Find in Files

通过在搜索面板中按 按钮来显示包含这些选项的菜单。

(译者注:Unix风格的文件路径指的是使用 / 来区分目录结构,例如 /Users/voidmain/ ,在 Windows平台上,可以使用 /C/Users/ 来指定盘符)

搜索结果显示方式

在搜索面板中,可以使用下面的选项来自定义搜索结果的显示方式:

  • 在单独的缓冲区/输出面板中显示
  • 显示上下文
_images/search-and-replace-search-results.png

在文件中查找结果显示在视图中

_images/search-and-replace-results-buttons.png

用于自定义“在文件中查找”结果的按钮

搜索结果跳转

一旦找到了符合要求的内容,你就可以使用以下的快捷键进行结果之间的跳转:

转到下一个匹配项 F4
转到上一个匹配项 Shift + F4

我们将逐一讲解这两种搜索方式,但在此之前,让我们先来聊一聊一个强大的文本搜索工具:正则表达式。

正则表达式

正则表达式用于在文本中找到复杂的 模式 。为了最大程度的利用Sublime Text提供的搜索与替换功能,你至少需要掌握基本的正则表达式使用方法。在本文档中我们不会讲解如何使用正则表达式。

(译者注:要想学习正则表达式,可以阅读O’REILLY出版社出版的 《精通正则表达式》 一书)

如果让你一直输入 regular expression(正则表达式) 这个词组,很快你就会觉得很无聊,甚至会觉得的很烦人,因此宅男们经常把这个词组缩写为 regexp 或者 regex

(译者注:对汉语来说毫无压力,大家可以说“正则表达式”或者“正则”;另外,上文中的 宅男 原文为 nerd ,还可以翻译成书呆子、极客 geek ,根据语境这里指代经常使用计算机的人)

咱们来看个正则表达式的例子吧:

(?:Sw|P)i(?:tch|s{2})\s(?:it\s)?of{2}!

正则表达式真是坑爹啊。

Sublime Text使用正则表达式中的 Boost语法

(译者注:正则表达式有很多类型的方言)

在Sublime Text中使用正则表达式

为了在搜索中利用正则表达式,需要在搜索面板中开启这个选项。否则,输入的正则字符将被视作字符常量进行匹配。

_images/search-and-replace-regex-sample.png

启用了正则表达式选项的搜索面板

See also

Boost库的正则表达式文档
有关正则表达式的文档。
Boost库的格式字符串文档
有关格式字符串的文档。 请注意,Sublime Text另外将 {n} 解释为 $n

构建系统(批处理)

See also

构建系统的参考内容
有关所有可用选项,变量等的完整文档。

Warning

构建系统选项目前正在开发频道中进行重构。以下信息可能已过时。

有关详情,请参阅 此论坛主题

通过构建系统,你能够使用像 maketidy 这样的外部程序以及各种解释器来运行你的文件。

在构建系统中调用的外部可执行程序一定要能够通过 PATH 环境变量找到。请参考 构建系统常见问题 章节来了解有关如何正确设置 PATH 环境变量的更多信息。

文件格式

构建系统是以 .sublime-build 作为文件扩展名的JSON文件。

示例

下面是构建系统的一个小例子:

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}
cmd

必填内容。这个选项的内容是实际执行的命令行语句:

python -u /path/to/current/file.ext
file_regex
存放一段用于捕获外部程序输出的错误信息的Perl风格的正则表达式。这部分信息用于帮助你在不同的错误实例之间使用 F4 快捷键进行跳转。
selector
如果你勾选了 Tools | Build System | Automatic 选项,Sublime Text会自动从构建系统中通过 selector 选项找到适合当前文件的构建方式。

除了这些选项,在构建系统中还可以使用一些变量,例如在前面使用的 $file 变量,就能自动扩充为当前缓冲区对应的文件名。

构建系统存储在哪里

构建系统必须被放在 Packages 文件夹下面的某个位置(例如 Packages/User)。许多包都含有它们自己的构建系统。

运行构建系统

可以使用 F7 快捷键来运行构建系统,也可以从 Tools | Build 菜单中运行。

文件管理与导航

Sublime Text包含各种功能帮助你保持工作井井有条并找到你的项目周围的方式。

项目

项目将文件和文件夹组成一组,以保持你的工作井井有条。它们支持特定于项目的设置和构建系统,你可以在它们之间快速切换,以便在你离开的地方继续工作。

对于 随意跳转(Goto Anything) 和项目范围的Goto定义而言,向项目添加文件夹是非常必要的。

即使你尚未创建或打​​开一个项目,也始终存在活动项目。在这种情况下,你正在使用一个功能有限的 匿名项目。新窗口在首次打开时始终使用匿名项目。

项目元数据存储在具有 .sublime-project 扩展名的JSON文件中。只要有 .sublime-project 文件,你就会找到一个辅助 .sublime-workspace 文件。.sublime-workspace 文件包含你不 编辑的会话数据。(稍后将详细介绍工作空间。)

Note

一般来说,将 .sublime-project 文件提交到源代码存储库是很好的,但始终要注意存储在它们中的内容。

以上情况并非如此,在不是每个人都使用Sublime Text作为编辑器的项目中,建议将 .sublime-project 文件保留在项目的存储库之外。

创建一个项目

通过打开新窗口或使用 Project → Close Project 菜单关闭任何活动项目,从匿名项目开始。

你可以使用 Project 菜单或侧边栏的上下文菜单在项目中添加和删除文件夹。如果将文件夹拖到Sublime Text窗口,它也将被添加到项目中。

要保存匿名项目,请转到 Project → Save Project As…

保存项目后,你可以手动编辑它以调整更多选项。

打开项目

使用主菜单,你可以通过选择 Projects → Open RecentProjects → Switch Project…Projects → Quick Switch Project… 来打开或切换项目。

切换项目时,Sublime Text将关闭当前项目并在同一窗口中打开指定的项目。打开项目时,Sublime Text将打开一个新窗口并在那里打开所选项目。

与项目相关的键盘快捷键:

Quick Switch Project… Ctrl + Alt + P

Note

适用于Windows的build 3096删除了按键绑定,如果需要,必须手动添加。为此,请将以下按键绑定添加到用户按键绑定文件:

{ "keys": ["ctrl+alt+p"], "command": "prompt_select_workspace" }

此外,你可以通过将 .sublime-project 文件作为参数传递给Sublime Text附带的 subl 命令行帮助程序,从命令行打开项目。

项目文件的高级配置

除了单个目录的更多选项外,项目还可以具有特定的构建系统或设置覆盖。

See also

/reference/projects
有关项目文件格式和选项的文档。

与侧边栏和项目相关的设置

binary_file_patterns
通配符列表。匹配这些通配符的文件将显示在侧边栏中,但将从Goto Anything和Find in Files中排除。

工作空间

工作空间包含与项目关联的会话数据,其中包括有关已打开文件,窗格布局,查找历史记录等的信息。项目可以有多个工作空间。

工作空间的一个常见用例是处理 同一项目中 的不同功能,其中每个功能都需要打开一组不同的文件,并且你希望快速切换功能。在这种情况下,你将需要第二个工作空间。编写测试可能就是一个例子。

工作空间的行为与项目非常相似。要创建新工作空间,请选择 Project → New Workspace for Project。要保存活动的工作空间,请选择 Project → Save Workspace As…

工作空间元数据存储在带有 .sublime-workspace 扩展的JSON文件中,你不应该编辑它。

要在不同的工作空间之间切换,请使用 Ctrl+Alt+P,就像处理项目一样。

与项目一样,你可以通过将所需的 .sublime-workspace``文件作为参数传递给Sublime Text附带的 ``subl 命令行帮助程序,从 命令行 打开工作空间。

Caution

.sublime-project 文件不同,.sublime-workspace 文件不是手动共享或编辑的。你永远不应将 .sublime-workspace 文件提交到源代码存储库中。它们可能包含敏感信息。

文件导航

随意跳转(Goto Anything)

使用随意跳转,你可以快速浏览项目的文件。

_images/file-management-goto-anything.png

与随意跳转相关的键盘快捷键:

Open Goto Anything Ctrl + P
Pin current item and close Goto Anything Enter
Pin current item
Close Goto Anything Esc

当你在随意跳转输入区域中进行输入时,将搜索当前项目中的文件名称,并显示最佳匹配的预览。此预览是 瞬态的;也就是说,在对它执行某些操作之前,它不会成为实际的活动视图。你会在其他情况下找到瞬态视图,例如,在单击侧边栏中的文件后。

“随意跳转”正如其名,其功能不仅限于查找文件。

随意跳转操作项

随意跳转接受几个操作项。所有这些都可以单独使用或在搜索后使用。

例如:

models:100

这指示Sublime Text首先搜索路径与 models 匹配的文件,然后转到所述文件中的第100行。

支持的操作项
@symbol

在活动文件中搜索名为 symbol 的符号。

Note

符号通常包括类和函数名称。

如果活动文件类型具有为其定义的符号,则符号搜索将仅产生结果。符号在 .tmLanguage 文件中定义。有关符号的更多信息,请参阅 ../reference/symbols

#term
term 搜索词进行模糊搜索并突出显示所有匹配项。
:line_number
跳转到指定的 line_number,如果 line_number 大于文件的行数,则跳转到文件的末尾。

随意跳转操作项绑定了以下快捷键:

@ Ctrl + R
# Ctrl + ;
: Ctrl + G

侧边栏

侧边栏可以提供一个项目的概览视图。添加到侧边栏的文件和目录均可以通过“随意跳转”功能访问,并且响应项目范围内的指令。项目与侧边栏是密切相关的。不管以显式或是隐式的方式,总是有一个项目存在于侧边栏中。

侧边栏通过其上下文菜单提供基本文件管理操作。

这些是与侧栏相关的常见键盘快捷键:

Toggle side bar Ctrl + K, Ctrl + B
Give the focus to the side bar Ctrl + 0
Return the focus to the view Esc
Navigate side bar Arrow keys

从侧边栏打开的文件会创建 半瞬态视图。与瞬态视图不同,半瞬态视图显示为新选项卡。半瞬态视图的选项卡标题以斜体显示。在打开新的半瞬态视图之前,同一窗格中的任何其他预先存在的半瞬态视图将自动关闭。

这是一个显示普通视图,瞬态视图和半瞬态视图的示例。请注意,瞬态视图没有选项卡:

_images/file-management-transient-views-detail.png

窗格

窗格是一组视图。在Sublime Text中,您可以同时打开多个窗格。

与窗格相关的主要键盘快捷键:

Create new pane Ctrl+K, Ctrl+↑
Close active pane Ctrl+K, Ctrl+↓

可以在 View → Layout 和相关子菜单下找到更多窗格管理命令。

定制Sublime Text

Sublime Text是高度可定制的。在接下来的几节中,我们将向你介绍如何根据自己的需要和偏好来定制它。特别地,我们 不涉及 主题,这是一个极其可配置的Sublime Text区域。

设置项

Sublime Text把配置信息保存在 .sublime-settings 文件中。为了拥有较好的灵活性,作为代价, 需要一个略显繁琐的系统来管理设置项。我们先来说一条基本原则吧:

个人定义的设置项文件一定要保存到 Packages/User 目录下,这样就能保证在发生冲突的时候,你定 义的文件拥有较高的优先级。

这一点解释清楚之后,咱们就可以揭开设置项工作的具体原理了,从而满足部分喜欢受虐读者的需求。

(译者注:作者原文是masochistic,可以翻译成受虐狂,这里感觉也可以理解成求知若渴的人,求指正)

文件格式

设置项文件是以 .sublime-settings 作为扩展名的的JSON文件。

设置项文件类型

可以通过 .sublime-settings 文件的名字看出它的用途。这些文件的名字可能具有一定的描述性(例如 Preferences (Windows).sublime-settings 或者 Minimap.sublime-settings),亦或是跟 它所控制的内容有关联。以控制文件类型的设置项文件为例,命名时要求必须有与之对应的 .tmLanguage 语法定义文件。因此,对于 .py 文件类型,它的语法定义信息存放在 Python.tmLanguage 文件中, 那么对应的文件类型设置项文件就该被叫做 Python.sublime-settings

除此之外,某些设置文件只能作用于某个特定的平台。可以通过文件名进行推断,例如: Preferences (Windows).sublime-settingsPreferences (Linux).sublime-settings

有一点特别 重要 :存放在 Packages/User 目录中的平台相关的设置文件将被忽略。通过这种方式, 就可以保证单个设置文件内容可以覆盖其他所有设置文件的内容了。

如何访问并修改公共的设置项文件

除非你对设置项有非常精确的掌控力,否则,你只需要通过 Preferences | Settings - UserPreferences | Settings - More 菜单项来访问主要的配置文件。编辑 Preferences - Settings Default 这个文件并不是一件明智的事情,因为每次版本升级这些修改都 将被重置。不过,你确实可以把这些文件当作一个不错的参考资料:默认设置项文件里面包含了解释所有能 为你所用的全局设置项和文件类型设置项的说明注释。

.sublime-settings 文件的优先级顺序

名字相同的设置项文件(例如,都叫 Python.sublime-settings 的文件)可以在多个位置出现。以相同 名称命名的设置项文件中的内容都将按预定义的规则进行合并或者覆盖。请参考 排序与优先级顺序 这一小节以了解更多信息。

再说明一次,在 Packages/User 目录下的设置项文件拥有最高优先级,并且最终会覆盖其他同名设置项 文件中的相同内容。

除了设置项文件以外,Sublime Text还维护 会话 数据 —— 一些针对正在编辑的文件集所应用的设置项。 会话数据是在你编辑文件的过程中发生变化的,所以,无论你通过何种方式调整了一个特定文件的设置项 (主要是通过API调用的方式),这些设置项的变更将被记录在当前的会话中,并且将拥有比所有符合条件的 .sublime-settings 文件更高的优先级。

如果想要检查针对特定文件当前正在发挥作用的设置项的值,可以在控制台中输入 view.settings().get(<设置项名称>) 命令。

最后需要注意的是,某些设置项的值可能会被系统自动进行调整。请记住这一点,这样一来你就能够解释某 些令你困惑的设置项内容了。举例来说,在查看某些与空格相关的设置项的值,以及某些 语法 设置项 内容的时候,就有可能遇到这种问题。

接下来你将看到Sublime Text是如何处理Windows平台上Python相关的设置项文件的,这里的设置项文件 目录结构是虚构的:

  • Packages/Default/Preferences.sublime-settings
  • Packages/Default/Preferences (Windows).sublime-settings
  • Packages/User/Preferences.sublime-settings
  • Packages/Python/Python.sublime-settings
  • Packages/User/Python.sublime-settings
  • Session data for the current file
  • 当前文件的会话数据
  • Auto adjusted settings
  • 由系统自动调整的设置项内容

(译者注:分析下优先级,可以得到结论:全局默认项 < 平台默认项 < 用户设置项 < 语言相关的设置 < 由用户指定的语言相关的设置 < 会话数据 < 系统调整的数据)

全局编辑器设置以及全局文件设置

这类全局设置项内容一般被保存在名为 Preferences.sublime-settingsPreferences (<平台名称>).sublime-settings 的文件中。默认的全局设置项存放在 Packages/Default 目录中。

上面所说的 <平台名称> 可能是 WindowsLinux 或者 OSX

文件类型设置项

如果你想针对某个特定的文件类型进行一些配置,那请根据这个文件类型的语法定义文件名称来对应的命名 .sublime-settings 文件。举例来说,如果我们的语法定义文件叫 Python.tmLanguage ,那么 设置项文件的名称就应该叫 Python.sublime-settings

通常情况下,某个特定文件类型的设置项信息一般存放在包组文件夹的一个目录中,例如 Packages/Python, 但是,与同一个文件类型相关的多个设置项文件也有可能被存放在不同的位置。

与全局设置项类似,也可以为文件类型设置项信息创建平台相关的内容。例如只有在Linux平台下,保存在 Python (Linux).sublime-settings 中的设置项内容才会被系统考虑。

需要特别指出的一点是,在 Packages/User 目录下,只有 Python.sublime-settings 文件会被 加载,所有以 Python (<平台名称>).sublime-settings 命名的平台相关的变种都不会被考虑。

不管文件类型设置项信息保存在哪里,它拥有比保存在全局设置项文件中的、影响文件类型的设置项都高的 优先级。

(再说一次)用户指定的设置项信息应该保存到哪里

无论何时,当你想要保存一些设置的时候,尤其是那些在软件升级前后应该被保留的设置,就把它们保存在 Packages/User 目录下的对应 .sublime-settings 文件中吧。

缩进

See also

缩进
Sublime Text官方文档

键位绑定

更多信息请参考

键位绑定参考文档
有关键位绑定的完整文档。

键位绑定使得你能够将按键与动作进行映射。

文件格式

键位绑定是以 .sublime-keymap 作为扩展名的JSON文件。为了让键位能够更好的与各平台融合,系统为 Linux,OSX以及Windows平台分别提供了不同的文件。只有与当前系统相符的键位映射文件才会生效。

示例

下面这段代码是从Windows平台默认的按键映射文件中截取出来的:

[
        { "keys": ["ctrl+shift+n"], "command": "new_window" },
        { "keys": ["ctrl+o"], "command": "prompt_open_file" }
]

定义与重载键位绑定

Sublime Text自带一套默认的键位绑定(一般对应这个文件: Packages/Default/Default (Windows).sublime-keymap))。如果你想重载其中的部分键位 或者添加新的键位绑定,你可以在具有更高文件优先级的位置重新存储一个文件,例如 Packages/User/Default (Windows).sublime-keymap

请参考 排序与优先级顺序 来了解Sublime Text中关于文件优先级以及文件合并的更多信息。

高级键位绑定

对于简单的键位绑定,就是一个键位组合对应一个命令。除此之外,还有一些传递参数和上下文信息的复杂语法。

参数传递

通过 args 键可以指定需要的参数:

{ "keys": ["shift+enter"], "command": "insert", "args": {"characters": "\n"} }

在这个例子中当你按下 Shift+Enter 的时候, \n 将会作为参数传递给 insert 命令。

上下文

利用上下文,可以通过插入符的位置及其他状态信息来决定某种键位组合是否可以发挥作用。

{ "keys": ["escape"], "command": "clear_fields", "context":
        [
                { "key": "has_next_field", "operator": "equal", "operand": true }
        ]
}

这段代码的作用是 当有下一个可用域的时候就清空当前代码片段,并返回正常编辑模式 。因此,当你 没有在代码域中循环切换的时候,按下 ESC 键就 不会 触发这个按键绑定(然而,如果 ESC 恰巧与另外的上下文进行了绑定,那么那个动作仍然会被触发——事实上,对于 ESC 来说,这种情况 并不少见)。

菜单项

关于这个主题没有任何可用文档。

但是,可以参考 李小龙的嘶吼

扩展 Sublime Text

从下面的一长串主题中可以看出,Sublime Text是一个非常易于扩展的编辑器。

命令

命令在Sublime Text中无处不在:按键绑定,菜单项和宏都通过命令系统工作。它们也可以在其他地方找到。

一些命令在编辑器的核心中实现,但其中许多命令都是作为Python插件提供的。可以从Python插件调用每个命令。

命令调度

通常,命令绑定到应用程序对象,窗口对象或视图对象。但是,窗口对象将根据输入焦点调度命令,因此您可以从窗口对象发出视图命令,并为您找到正确的视图实例。

命令剖析

命令的名称由下划线(snake_case)分隔,如 hot_exit ,并且可以使用参数字典,其键必须是字符串,其值必须是JSON类型。以下是从Python控制台运行的一些命令示例:

view.run_command("goto_line", {"line": 10})
view.run_command('insert_snippet', {"contents": "<$SELECTION>"})
view.window().run_command("prompt_select_project")

See also

命令参考文档
命令参考内容

宏是包含命令序列的基本自动化设施。只要您需要重复完全相同的步骤来执行操作,请使用它们。

宏文件是JSON文件,扩展名为 .sublime-macro。Sublime Text附带了一些提供核心功能的宏,例如行和字删除。你可以在 Tools | Macros 下或者 Packages/Default 中找到这些宏。

如何录制宏

要开始录制宏,请按 Ctrl+q ,然后逐个执行所需的步骤。完成后,再次按 Ctrl+q 停止宏录制器。您的新宏不会保存到文件中,而是保存在宏缓冲区中。现在,您可以通过按 Ctrl+Shift+q 运行录制的宏,或通过选择 Tools | Save macro… 将其保存到文件中。

请注意,宏缓冲区将仅记住最新记录的宏。此外,宏仅记录发送到缓冲区的命令:窗口级命令(如创建新文件)将被忽略。

如何编辑宏

作为录制宏的替代方法,您可以手动编辑它。只需在 Packages/User 下保存带有 .sublime-macro 扩展名的新文件,然后向其中添加命令即可。宏文件具有以下格式:

[
    {"command": "move_to", "args": {"to": "hardeol"}},
    {"command": "insert", "args": {"characters": "\n"}}
]

有关命令的更多信息,请参见 命令 部分。

如果您手动编辑宏,则需要通过在 \ 前面加上引号,空格和反斜杠来转义。

存储宏的位置

宏文件可以存储在任何包文件夹中,它们将显示在 Tools | Macros | <PackageName> 下。

宏的按键绑定

通过将宏文件路径传递给 run_macro_file 命令,可以将宏文件绑定到组合键,如下所示:

{"keys": ["super+alt+l"], "command": "run_macro_file", "args": {"file": "res://Packages/User/Example.sublime-macro"}}

代码片段

无论您是在敲代码或撰写下一个吸血鬼畅销书,您都可能需要一次又一次地使用某些短文本片段。使用代码片段(Snippets)来节省自己繁琐的打字。代码片段是智能模板,可以为您插入文本并使其适应其上下文。

要创建新代码片段,请选择 Tools | New Snippet… 。Sublime Text将为您呈现框架。

代码片段可以存储在任何一个包文件下,为了在你学习时方便,你可以将其保存在你的 Packages/User 文件夹下。

代码片段文件格式

代码片段通常存在于Sublime Text包中。它们是带有 .sublime-snippet 扩展名的简化XML文件。例如,您可以在 Email 包中包含 greeting.sublime-snippet

典型的代码片段的结构如下(包括Sublime Text为方便你使用添加的默认提示):

<snippet>
    <content><![CDATA[Type your snippet here]]></content>
    <!-- Optional: Tab trigger to activate the snippet -->
    <tabTrigger>xyzzy</tabTrigger>
    <!-- Optional: Scope the tab trigger will be active in -->
    <scope>source.python</scope>
    <!-- Optional: Description to show in the menu -->
    <description>My Fancy Snippet</description>
</snippet>

snippet 元素包含Sublime Text需要的所有信息,以便知道要插入什么,是否插入以及何时插入。让我们依次看看这些部分。

content

实际的代码片段。代码片段可以包括从最简单到相当复杂的模板。接下来,我们会看到它们的例子。

在编写你自己的代码片段时,你要记住以下内容:

  • 如果你想输入 $ ,你需要按照这样转义:\$
  • 如果代码片段包括缩进,一般使用tab。选项 translateTabsToSpacestrue 时,代码片段添加的tab会自动转换成空格。
  • content 必须包含在块 <![CDATA[…]]> 中。如果不这么写,代码片段将不起作用。
  • 您的代码片段的 content 不得包含 ]]> ,因为此字符串会过早地关闭 <![CDATA[…]]> 部分,从而导致XML错误。要解决这个陷阱,可以在字符串中插入一个未定义的变量,像这样: ]]$NOT_DEFINED> 。这个修改过的字符串通过XML解析器而不关闭内容元素的 <![CDATA[…]]> 部分,但Sublime Text会在将代码片段插入文件之前用空字符串替换 $NOT_DEFINED 。 换句话说,当您触发代码片段时,您的代码片段文件 content 中的 ]]$NOT_DEFINED> 将被写为 ]]>
tabTrigger

定义你在需要添加代码片段时按下的按键序列。在你按下按键序列后,再按下键盘上的 Tab 键,代码片段才会生效。

tab触发器是一个隐式的按键绑定。

scope
范围选择器决定了代码片段在哪个范围内生效。详情请看 Scopes
description
在代码片段菜单显示代码片段时使用。如果不定义,Sublime Text默认显示代码片段名。

根据之前的信息,现在可以开始按照下面的章节写自己的代码片段了。

Note

为了简洁,除非另外说明,这里的例子中只包含 content 元素。

代码片段特性

环境变量

代码片段根据环境变量获得上下文信息。Sublime Text会自动设定下面所述的变量值。

你也可以加上自己的变量来提供额外的信息。这些自定义变量都在文件 .sublime-options 中定义。

$PARAM1, $PARAM2… 传递给 insert_snippet 命令的各个参数。
$SELECTION 代码片段被触发的时候选中的文本内容。
$TM_CURRENT_LINE 代码片段被触发的时候光标所在行的内容。
$TM_CURRENT_WORD 代码片段被触发的时候光标所在的单词。
$TM_FILENAME 正在编辑的文件名称,包含文件扩展名。
$TM_FILEPATH 正在编辑的文件的文件路径。
$TM_FULLNAME 用户的用户名。
$TM_LINE_INDEX 插入代码片段的列的位置,位置是从0开始计数的。
$TM_LINE_NUMBER 插入代码片段的行的位置,位置是从1开始计数的。
$TM_SELECTED_TEXT $SELECTION 是等价的。
$TM_SOFT_TABS translateTabsToSpaces 选项是真的时候,值是 YES ,否则为 NO
$TM_TAB_SIZE tab对应的空格数(受 tabSize 选项的控制)。

接下来,我们看一个使用变量的简单的例子:

====================================
USER NAME:          $TM_FULLNAME
FILE NAME:          $TM_FILENAME
 TAB SIZE:          $TM_TAB_SIZE
SOFT TABS:          $TM_SOFT_TABS
====================================

# Output:
====================================
USER NAME:          guillermo
FILE NAME:          test.txt
 TAB SIZE:          4
SOFT TABS:          YES
====================================
字域

有了字域标记,你可以通过在代码片段中的某一位置按下键盘的 Tab 键来循环。一旦添加 了代码片段,字域可以通过自定义的信息帮助你走查。

First Name: $1
Second Name: $2
Address: $3

上面的例子中,当你按下一次键盘 Tab 键时,光标会跳转到 $1 。当你连续按下 Tab 两次是,会跳转 到 $2 等等。你也可以按下键盘的 Shift+Tab 键后退。如果你在最高制表位按下 Tab 键,Sublime Text 会将光标停留在代码片段内容的末尾,以便你可以重新开始编辑。

如果你想控制退出点的位置,你可以使用 $0 标记。

你可以通过按下键盘的 Esc 键跳出字域循环。

镜像字域

相同的字域标记会相互映射:当你输入了第一个,剩下的立刻填充相同的值。

First Name: $1
Second Name: $2
Address: $3
User name: $1

这个例子中,”User name”会填充”First Name”的值。

占位符

通过扩展一些字域的语法,你可以为每一个域设定默认值。如果在你的代码片段里需要设定 一个一般的情况,你又希望不失去自定义的便捷,占位符是非常有用的。

First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: $1

变量也可以用作占位符:

First Name: ${1:Guillermo}
Second Name: ${2:López}
Address: ${3:Main Street 1234}
User name: ${4:$TM_FULLNAME}

你也可以在其他的占位符里嵌套占位符:

Test: ${1:Nested ${2:Placeholder}}
替换

Warning

这部分是一个草稿,可能会有不准确的内容。

除了占位符语法,制表符的设置可以使用替换设定更多复杂的操作。使用替换可以根据映射的制表符 设置动态地生成文本。

替换的语法如下:

  • ${var_name/regex/format_string/}
  • ${var_name/regex/format_string/options}
var_name
变量名:1, 2, 3…
regex
Perl风格的正则表达式:关于 正则表达式 ,请参考Boost库的文档。
format_string
参考Boost库文档的 格式字符串 内容。
options
可选的。可以选择下面的任何一个:
i
忽略大小写敏感的正则。
g
替换所有匹配 regex 的内容。
m
在字符串中不要忽略换行符。

有了替换,比如,你可以如此简单地添加文本下划线:

      Original: ${1:Hey, Joe!}
Transformation: ${1/./=/g}

# Output:

      Original: Hey, Joe!
Transformation: =========

补全

See also

Reference for completions
有关所有可用选项的完整文档。
Sublime Text Documentation
关于此主题的官方文档。

补全提供了IDE的精神功能,以建议术语和插入片段。补全通过补全列表工作,或者可选择按 Tab 键。

请注意,Sublime Text将查找并为您插入的更广泛意义上的单词的补全不仅限于补全文件,因为其他来源有助于补全单词列表,即:

  • 代码片段
  • API注入的补全
  • 缓冲内容

但是,.sublime-completions 文件是Sublime Text为您提供的最明确的方式。本主题涉及 .sublime-completions 文件的创建以及所有补全源之间的交互。

文件格式

补全是具有 .sublime-completions 扩展名的JSON文件。补全文件中的条目可以包含片段或纯字符串。

例如

以下是HTML补全的摘录:

{
        "scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",

        "completions":
        [
                { "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
                { "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
                { "trigger": "acronym", "contents": "<acronym>$0</acronym>" }
        ]
}
scope
确定何时使用此补全列表填充补全列表。有关更多信息,请参阅 Scopes

在上面的示例中,我们仅使用基于触发器的补全,但补全文件也支持简单补全。简单的补全只是简单的字符串。通过一些简单的补全扩展我们的示例,我们最终得到一个如下列表:

{
        "scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",

        "completions":
        [
                { "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
                { "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
                { "trigger": "acronym", "contents": "<acronym>$0</acronym>" },

                "ninja",
                "robot",
                "pizza"
        ]
}

补全来源

补全不仅源自 .sublime-completions 文件。这是补全源的详尽列表:

  • 代码片段
  • API注入的补全
  • .sublime-completions 文件
  • 缓冲区中的单词
补全来源的优先顺序

这是补全优先顺序的排列

  • 代码片段
  • API注入的补全
  • .sublime-completions 文件
  • 缓冲区中的单词

如果当前前缀与其制表符触发器完全匹配,则片段将始终获胜。对于其余的补全源,执行模糊匹配。此外,片段总是会在模糊匹配中丢失。请注意,这仅在要自动插入补全时才有意义。显示补全列表时,即使前缀仅部分匹配代码段的选项卡触发器,也会沿其他项列出代码段。

如何使用补全

有两种方法可以使用补全,虽然在补全筛选时给予补全的优先级总是相同的,但结果会有不同,下面将对此进行解释。

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

  • 通过补全列表(Ctrl+spacebar);
  • Tab.
补全清单

补全列表(Ctrl+空格键)可以以两种方式工作:通过调出要补全的建议单词列表,或直接插入最佳匹配。

如果最佳补全的选择不明确,则将向用户呈现交互式列表,该用户必须自己选择项目。与其他项目不同,此列表中的片段以以下格式显示:<tab_trigger>:<name>,其中 <tab_trigger><name> 是可变的。

使用 Ctrl+空格键 补全只有在补全候选列表可以缩小到给定当前前缀的一个明确选择时才会自动完成。

Tab-完成补全

如果您希望能够通过制表符补全,则必须将设置 tab_completion 设置为 true。默认情况下,tab_completion 设置为 true。片段标签完成不受此设置的影响:它们将始终根据其标签触发器完成。

启用 tab_completion 后,项目的补全始终是自动的,这意味着,与补全列表的情况不同,Sublime Text将始终为您做出决定。选择最佳补全的规则与上述相同,但如果含糊不清,Sublime Text仍将插入被认为最合适的项目。

插入文字制表符

启用 tab_completion 后,可以按 Shift+Tab 键插入文字制表符。

命令面板

See also

命令面板参考文档
有关命令面板选项的完整文档。

概述

命令面板 是一个绑定到键盘 Ctrl+Shift+P 的交互列表,其目的在意执行命令。命令面板 与命令文件相互联系。通常,命令不保证产生一个按键绑定,可以在 .sublime-commands 中作为一些很好的候选。

_images/command-palette-0001.png

命令面板

默认情况下,命令面板包含许多有用的命令,可以方便地访问各个设置以及设置文件。

要使用命令面板:

  1. 按下 Ctrl+Shift+P
  2. 选择一个命令
  3. 按下 Enter

命令面板通过文本过滤选项。这意味着无论何时打开它,您都不会总是看到每个 .sublime-commands 文件中定义的所有命令。

.sublime-commands 文件的示例

以下是 Packages/Default/Default.sublime-commands 的摘录:

[
    { "caption": "Project: Save As", "command": "save_project_as" },
    { "caption": "Project: Close", "command": "close_project" },
    { "caption": "Project: Add Folder", "command": "prompt_add_folder" },

    { "caption": "Preferences: Default File Settings", "command": "open_file", "args": {"file": "${packages}/Default/Base File.sublime-settings"} },
    { "caption": "Preferences: User File Settings", "command": "open_file", "args": {"file": "${packages}/User/Base File.sublime-settings"} },
    { "caption": "Preferences: Default Global Settings", "command": "open_file", "args": {"file": "${packages}/Default/Global.sublime-settings"} },
    { "caption": "Preferences: User Global Settings", "command": "open_file", "args": {"file": "${packages}/User/Global.sublime-settings"} },
    { "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} }
]

语法定义

语法定义使Sublime Text能够识别编程和标记语言。最值得注意的是,它们与颜色一起使用以提供语法突出显示。语法定义定义将缓冲区中的文本划分为命名区域的范围。Sublime Text中的几个编辑功能广泛使用了这种细粒度的上下文信息。

本质上,语法定义包括用于查找文本的正则表达式,以及或多或少任意的点分隔字符串,称为 scopesscope names。对于给定正则表达式的每次出现,Sublime Text都会为匹配的文本提供其对应的 scope name

先决条件

为了学习本教程,您需要安装 PackageDev,这是一个旨在简化Sublime Text新语法定义创建的软件包。按照README文件“Getting Started”部分中的安装说明进行操作。

文件格式

Sublime uses `property list`_ files (Plist) to store syntax definitions. Because editing XML files is a cumbersome task, though, we’ll be using JSON_ instead and converting it to Plist afterwards. This is where the AAAPackageDev package mentioned above comes in. Sublime Text使用 属性列表_(Plist)文件来存储语法定义。但是,因为编辑XML文件是一项繁琐的任务,所以我们将使用 YAML,然后将其转换为Plist格式。这是PackageDev包(如上所述)的用武之地。

Note

如果您在本教程中遇到意外错误,则可能是PackageDev或YAML的责任。不要立即认为您的问题是由于Sublime Text中的错误造成的。

无论如何,如果您更喜欢使用XML,请手动编辑Plist文件,但始终牢记它们对转义序列,许多XML标记等的不同需求。

Scopes

Scopes是Sublime Text中的关键概念。实质上,它们在缓冲区中被命名为文本区域。他们自己不做任何事情,但Sublime Text在需要上下文信息时偷看他们。

例如,当您触发代码片段时,Sublime Text会检查绑定到代码片段的scope并查看插入符号在文件中的位置。如果插入符号的当前位置与代码片段的scope选择器匹配,则Sublime Text会将其触发。否则,没有任何反应。

Scopes可以嵌套以允许高度粒度。您可以像使用CSS选择器一样向下钻取层次结构。例如,由于scope选择器,您可以仅在Python源代码中的单引号字符串中激活键绑定,但不能在任何其他语言的单引号字符串中激活。

Sublime Text继承了Textmate的scope思想,Textmate是Mac的文本编辑器。`Textmate的在线手册`_包含有关scope选择器的更多信息,这些信息对Sublime Text用户也很有用。特别是,颜色方案广泛使用scope来设置所需颜色的语言的每个方面。

语法定义的工作原理

语法定义的核心是与范围名称配对的正则表达式数组。Sublime Text将尝试将这些模式与缓冲区的文本进行匹配,并将相应的范围名称附加到所有实例。这些正则表达式和范围名称对称为 规则

规则按顺序应用,一次一行。每个规则都会使用匹配的文本区域,因此将从下一个规则的匹配尝试中排除(除少数例外)。实际上,这意味着在创建新的语法定义时,应该注意从更具体的规则转到更一般的规则。否则,贪婪的正则表达式可能会吞下您希望以不同方式设置样式的部分。

可以组合来自单独文件的语法定义,也可以递归地应用它们。

你的第一个语法定义

举例来说,让我们为Sublime Text代码片段创建一个语法定义。我们将设计实际的代码片段内容,而不是 .sublime-snippet 文件。

Note

由于语法定义主要用于启用语法突出显示,因此我们将使用样式将源代码文件分解为范围。 但请记住,颜色与语法定义不同,除了语法高亮之外,范围还有更多用途。

这些是我们想要在代码段中设置样式的元素:

  • 变量 ($PARAM1, $USER_NAME…)
  • 简单字段 ($0, $1…)
  • 带有占位符的复杂字段 (${1:Hello})
  • 嵌套字段 (${1:Hello ${2:World}!})
  • 转义序列 (\\$, \\<…)
  • 非法序列 ($, <…)

Note

在继续之前,请确保已安装AAAPackageDev软件包,如上所述。

创建新的语法定义

要创建新的语法定义,请按照下列步骤操作:

  • 前往 Tools | Packages | Package Development | New Syntax Definition
  • 将新文件作为 .JSON-tmLanguage 文件保存到你的 Packages/User 文件夹中。

您现在应该看到这样的文件:

{ "name": "Syntax Name",
  "scopeName": "source.syntax_name",
  "fileTypes": [""],
  "patterns": [
  ],
  "uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}

我们现在来看看关键元素。

uuid
位于末尾,这是此语法定义的唯一标识符。每个新的语法定义都有自己的uuid。不要修改它们。
name
Sublime Text将在语法定义下拉列表中显示的名称使用简短的描述性名称。通常,您将使用要为其创建语法定义的编程语言名称。
scopeName
此语法定义的顶级范围。它采用表单 source.<lang_name>text.<lang_name>。对于编程语言,请使用 source。对于标记和其他一切,text
fileTypes
这是文件扩展名列表。打开这些类型的文件时,Sublime Text将自动为它们激活此语法定义。
patterns
您的模式的容器。

对于我们的示例,请使用以下信息填写模板:

{   "name": "Sublime Snippet (Raw)",
    "scopeName": "source.ssraw",
    "fileTypes": ["ssraw"],
    "patterns": [
    ],
    "uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}

Note

JSON是一种非常严格的格式,因此请确保正确地获取所有逗号和引号。如果转换为Plist失败,请查看输出面板以获取有关错误的更多信息。稍后我们将解释如何将JSON中的语法定义转换为Plist。

分析模式

patterns 数组可以包含几种类型的元素。我们将在以下部分中介绍其中一些内容。如果您想了解有关模式的更多信息,请参阅Textmate的在线手册

匹配

他们采取这种形式:

{ "match": "[Mm]y \s+[Rr]egex",
  "name": "string.ssraw",
  "comment": "This comment is optional."
}
match
正则表达式Sublime Text将用于尝试查找匹配项。
name
应用于 match 事件的scope的名称。
comment
关于此模式的可选注释。

让我们回到我们的例子。看起来像这样:

{ "name": "Sublime Snippet (Raw)",
  "scopeName": "source.ssraw",
  "fileTypes": ["ssraw"],
  "patterns": [
  ],
  "uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}

也就是说,确保 patterns 数组为空。

现在我们可以开始为Sublime代码片段添加规则。让我们从简单的字段开始。这些可以与正则表达式匹配,如下所示:

\$[0-9]+
# or...
\$\d+

但是,因为我们正在用JSON编写正则表达式,所以我们需要考虑JSON自己的转义规则。因此,我们之前的例子变成:

\\$\\d+

随着逃避,我们可以像这样构建我们的模式:

{ "match": "\\$\\d+",
  "name": "keyword.source.ssraw",
  "comment": "Tab stops like $1, $2..."
}

我们也可以将它添加到我们的语法定义中:

{   "name": "Sublime Snippet (Raw)",
    "scopeName": "source.ssraw",
    "fileTypes": ["ssraw"],
    "patterns": [
        { "match": "\\$\\d+",
          "name": "keyword.source.ssraw",
          "comment": "Tab stops like $1, $2..."
        }
    ],
    "uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}

我们现在准备将我们的文件转换为 .tmLanguage。出于兼容性原因,语法定义使用Textmate的 .tmLanguage 扩展。如上所述,它们只是Plist格式的XML文件。

请按照以下步骤执行转换:

  • Tools | Build System 中选择 Json to tmLanguage
  • 按下 F7
  • 将在与 .JSON-tmLanguage 文件相同的文件夹中为您生成 .tmLanguage 文件
  • Sublime Text会将更改重新加载到语法定义中

您现在已经创建了第一个语法定义。接下来,打开一个新文件并使用扩展名 .ssraw 保存。缓冲区的语法名称应自动切换到“Sublime Snippet(Raw)”,如果键入 $1 或任何其他简单的片段字段,则应该获得语法突出显示。

让我们继续为环境变量创建另一个规则。

{ "match": "\\$[A-Za-z][A-Za-z0-9_]+",
  "name": "keyword.source.ssraw",
  "comment": "Variables like $PARAM1, $TM_SELECTION..."
}

重复上述步骤以更新 .tmLanguage 文件并重新启动Sublime Text。

微调匹配

您可能已经注意到,例如,$PARAM1 中的整个文本的样式方式相同。根据您的需求或个人喜好,您可能希望 $ 能够脱颖而出。这就是 captures 的来源。使用捕获,您可以将模式分解为组件以单独定位它们。

让我们重写之前的一个模式来使用 captures

{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
  "name": "keyword.ssraw",
  "captures": {
      "1": { "name": "constant.numeric.ssraw" }
   },
  "comment": "Variables like $PARAM1, $TM_SELECTION..."
}

捕获会为您的规则带来复杂性,但它们非常简单。请注意数字如何从左到右引用括号组。当然,您可以拥有任意数量的捕获组。

可以说,您希望其他范围在视觉上与此范围保持一致。继续改变它。

始末规则

到目前为止,我们一直在使用一个简单的规则。虽然我们已经看到如何将模式分解为更小的组件,但有时您会希望将源代码的大部分目标明确区分为开始和结束标记。

用引号和其他分隔结构括起来的文字字符串最好用开始结束规则处理。这是其中一条规则的骨架:

{ "name": "",
  "begin": "",
  "end": ""
}

好吧,至少在他们最简单的版本中。让我们来看一个包括所有可用选项:

{ "name": "",
  "begin": "",
  "beginCaptures": {
    "0": { "name": "" }
  },
  "end": "",
  "endCaptures": {
    "0": { "name": "" }
  },
  "patterns": [
     {  "name": "",
        "match": ""
                  }
  ],
  "contentName": ""
}

有些元素可能看起来很熟悉,但它们的组合可能令人生畏。让我们分别看一下。

begin
正则表达式为此范围的开头标记。
end
正则表达式为此范围的结束标记。
beginCaptures
捕获 begin 标记。它们像捕捉简单匹配一样工作。可选的。
endCaptures
beginCaptures 相同但是结束标记。可选。
contentName
整个匹配区域的范围,从开始标记到结束标记,包括在内。这将有效地为此规则中定义的beginCaptures,endCaptures和模式创建嵌套作用域。可选的。
patterns
仅与开始端内容匹配的模式数组 - 它们与开始或结束消耗的文本不匹配。

我们将使用此规则来设置片段中嵌套的复杂字段的样式:

{ "name": "variable.complex.ssraw",
   "begin": "(\\$)(\\{)([0-9]+):",
   "beginCaptures": {
       "1": { "name": "keyword.ssraw" },
       "3": { "name": "constant.numeric.ssraw" }
   },
   "patterns": [
       { "include": "$self" },
       {  "name": "string.ssraw",
          "match": "."
       }
   ],
   "end": "\\}"
}

这是我们将在本教程中看到的最复杂的模式。beginend 键是不言自明的:它们定义了 ${<NUMBER>:} 之间的区域。beginCaptures 进一步将开始标记划分为较小的范围。

然而,最有趣的部分是 patterns。递归和订购的重要性终于在这里出现了。

我们在上面已经看到,字段可以嵌套。为了解释这一点,我们需要递归地设置嵌套字段的样式。这就是 include 规则在提供 $self 值时的作用:它递归地将我们的整个语法定义应用于我们的开始结束规则中包含的文本部分,不包括 beginend 消耗的文本。

请记住,匹配的文本已被使用,并在下次匹配尝试时被排除。

为了完成复杂的字段,我们将占位符设置为字符串。由于我们已经在复杂字段中匹配了所有可能的标记,因此我们可以安全地告诉Sublime Text为任何剩余文本(.)提供文字字符串范围。

最后的接触

最后,让我们的样式转义序列和非法序列,并结束。

{  "name": "constant.character.escape.ssraw",
   "match": "\\\\(\\$|\\>|\\<)"
},

{  "name": "invalid.ssraw",
   "match": "(\\$|\\<|\\>)"
}

这里唯一的难点就是获得转义符号的数量。除此之外,如果您熟悉正则表达式,则规则非常简单。

但是,您必须注意将第二个规则放在与 $ 字符匹配的任何其他规则之后,否则您可能无法获得所需的结果。

另请注意,在添加这两个附加规则后,上面的递归始末规则将按预期工作。

最后,这是最终的语法定义:

{   "name": "Sublime Snippet (Raw)",
    "scopeName": "source.ssraw",
    "fileTypes": ["ssraw"],
    "patterns": [
        { "match": "\\$(\\d+)",
          "name": "keyword.ssraw",
          "captures": {
              "1": { "name": "constant.numeric.ssraw" }
           },
          "comment": "Tab stops like $1, $2..."
        },

        { "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
          "name": "keyword.ssraw",
          "captures": {
              "1": { "name": "constant.numeric.ssraw" }
           },
          "comment": "Variables like $PARAM1, $TM_SELECTION..."
        },

        { "name": "variable.complex.ssraw",
          "begin": "(\\$)(\\{)([0-9]+):",
          "beginCaptures": {
              "1": { "name": "keyword.ssraw" },
              "3": { "name": "constant.numeric.ssraw" }
           },
           "patterns": [
              { "include": "$self" },
              { "name": "string.ssraw",
                "match": "."
              }
           ],
           "end": "\\}"
        },

        { "name": "constant.character.escape.ssraw",
          "match": "\\\\(\\$|\\>|\\<)"
        },

        { "name": "invalid.ssraw",
          "match": "(\\$|\\>|\\<)"
        }
    ],
    "uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}

有更多可用的构造和代码重用技术,但上面的解释应该让您开始创建语法定义。

插件

See also

API参考文档
有关Python API的更详细的信息。
插件参考文档
有关插件的更详细的信息。

本节适用于具有编程技能的用户。

Sublime Text可以通过Python插件扩展。插件通过重用现有命令或创建新命令来构建功能。插件是一个逻辑实体,而不是物理实体。

先决条件

为了编写插件,您必须能够使用 Python 编程。在撰写本文时,Sublime Text使用Python 3。

存储插件的位置

Sublime Text会在以下目录中寻找可用的插件:

  • Installed Packages (只有 .sublime-package 文件)
  • Packages
  • Packages/<pkg_name>/

所以,存放在 Packages 更深层次的目录结构中的插件不会被加载。

不鼓励将插件直接保存在 Packages 下。Sublime Text在加载包之前以预定义的方式对包进行排序,因此如果您直接在 Packages 下保存插件文件,则可能会产生令人困惑的结果。

你的第一个插件

让我们给Sublime Text写一个”Hello, World!”插件吧:

  1. 选择目录 Tools | New Plugin…
  2. 保存到 Packages/User/hello_world.py

你刚刚编写了第一个插件!我们来使用它:

  1. 新建一个缓冲区(Ctrl+n)。
  2. 打开Python控制台(Ctrl+`)。
  3. 输入:view.run_command("example"),然后按下回车。

你应该会在新创建的缓冲区内看到文本”Hello, World!”。

分析你的第一个插件

前面我们编写插件大致如此:

import sublime, sublime_plugin

class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.insert(edit, 0, "Hello, World!")

sublimesublime_plugin 模块都是由Sublime Text提供的;它们不是Python标准库的一部分。

正如我们前面提到的,插件重用或创建 命令 。命令是Sublime Text中必不可少的构建块。它们只是Python类,可以通过类似的方式从不同的Sublime Text工具调用,如插件API,菜单文件,宏等。

新命令继承定义在 sublime_plugin*Command 类(后面会进行详细的描述)。

我们示例中的其余代码涉及 TextCommand 或API的详细信息。我们将在后面的章节中讨论这些主题。

然而,在继续之前,我们将看看我们如何调用新命令:首先我们打开Python控制台,然后我们发出了对 view.run_command() 的调用。这是一种调用命令的相当不方便的方法,但是当你处于插件的开发阶段时它通常很有用。现在,请记住,你可以通过键绑定和其他方式访问你的命令,就像其他命令一样。

命令名称约定

你可能已经注意到了我们的命令是以 ExampleCommand 命名的,但是我们向API传入的参数却是 example 。Sublime Text是通过截断 Command 的后缀,在 CamelCasedPhrases 中加入 下弧线的方式,比如 camel_cased_phrases ,来统一命令名称的。

新命令应遵循相同的命名模式。

命令类型

你可以新建以下类型的命令:

  • 窗口命令(sublime_plugin.WindowCommand
  • 文本命令(sublime_plugin.TextCommand

当你编写插件时,请根据你的目的选择合适的命令类型。

命令之间的共同特征

所有的命令都必须实现一个 .run() 方法才能运行。另外,所有命令都可以接受任意长度的 关键字参数。

注意:命令的参数必须是有效的JSON值,因为ST内部如何序列化它们。

窗口命令

窗口命令是在窗口级生效的。这并不意味着你不能通过窗口命令控制视图,但是这也并不是不需要你开启一些视图来让窗口命令生效。比如,内置命令 new_file 是一个 WindowCommand ,然而没有视图一样可以生效。因为此时要求打开一个视图并没有意义。

窗口命令实例有一个 .window 属性,指向创建它们的那个窗口实例。

窗口命令的 .run() 方法不需要传入参数。

窗口命令能够将文本命令路由到其窗口的活动视图。

文本命令

文本命令是在视图级生效的,并且需要存在一个视图使之生效。

文本命令实例有一个 .view 属性,指向创建它们的那个视图实例。

文本命令的 .run() 方法需要一个 edit 实例作为第一个参数。

文本命令和 edit 对象

编辑 edit 对象组修改视图,以便撤销和宏命令是以合理的方式运行。

注意:你有责任新建和关闭edit对象。为此,你需要调用 view.begin_edit()edit.end_edit()。文本命令为了方便,在其 run 方法中获取传入的 edit 对象。另外,许多 ``View``方法都需要一个edit对象。

事件响应

任何继承自 EventListener 的命令都可以响应事件。

另一个插件示例:添加补全列表

接下来,我们做一个从Google自动填充服务获取数据的插件,然后添加到Sublime Text的补全列表。请注意对于将其作为一个插件,这并不是什么好主意。

import sublime, sublime_plugin

from xml.etree import ElementTree as ET
import urllib

GOOGLE_AC = r"http://google.com/complete/search?output=toolbar&q=%s"

class GoogleAutocomplete(sublime_plugin.EventListener):
    def on_query_completions(self, view, prefix, locations):
        elements = ET.parse(
        urllib.request.urlopen(GOOGLE_AC % prefix)
    ).getroot().findall("./CompleteSuggestion/suggestion")

        sugs = [(x.attrib["data"],) * 2 for x in elements]

        return sugs

Note

确保你在这次尝试以后,不要保留这个插件,否则会干扰自动补全系统。

See also

EventListener.on_query_completions()
有关此示例中使用的API事件的文档。

学习API

API参考文献记录在 www.sublimetext.com/docs/3/api_reference.html 上。

要熟悉Sublime Text API和可用命令,阅读现有代码并从中学习可能会有所帮助。

特别是,Packages/Default 包含许多未记录的命令和API调用的示例。请注意,如果要查看其中的代码,首先必须将其内容提取到文件夹中 - PackageResourceViewer 对此有所帮助。

包只是 Packages 下的目录。它们主要用于组织目的,但Sublime Text在处理它们时遵循一些规则。稍后会详细介绍。

这是包含在包中的典型资源列表:

  • 构建系统 (.sublime-build)
  • 快捷键 (.sublime-keymap)
  • 宏 (.sublime-macro)
  • 菜单 (.sublime-menu)
  • 插件 (.py)
  • 偏好 (.tmPreferences)
  • 设置 (.sublime-settings)
  • 语法定义 (.tmLanguage)
  • 代码片段 (.sublime-snippet)
  • 主题 (.sublime-theme)

某些软件包可能包含其他软件包或核心功能的支持文件。例如,拼写检查器使用 PackagesLanguage - English 作为英语词典的数据存储。

包的类型

为了讨论本指南中的软件包,我们将它们分组。这个划分是人为的,为了本主题的清晰起见。Sublime Text不以任何方式使用它。

核心包
Sublime Text需要这些包才能工作。
运送包
Sublime Text在每个安装中都包含这些包,尽管它们在技术上并不是必需的。运送包可以增强Sublime Text的功能。它们可能是由用户或第三方提供的。
用户包
这些包由用户安装,以进一步扩展Sublime Text。它们不是任何Sublime Text安装的一部分,并且始终由用户或第三方提供。
已安装包
Sublime Text可以在删除时恢复的任何包。

让我们再次强调一点,你不需要记住这个分类。此外,值得注意的是,第三方 我们主要是指其他编辑的用户,如Textmate的用户。

安装包

安装包有两种主要方式:

  • .sublime-package 文件
  • 版本控制系统

最终,安装包只需要在 Packages 下放置一个包含Sublime Text资源的目录。从一个系统到另一个系统的唯一变化是如何复制这些文件。

安装 .sublime-package 文件

.sublime-package 文件复制到 Installed Packages 目录并重新启动Sublime Text。如果 Installed Packages 不存在,则可以创建它。

请注意,.sublime-package 文件只是带有自定义文件扩展名的 .zip 文件。

从版本控制系统安装包

解释如何使用版本控制系统(VCSs)超出了本指南的范围,但是在Google Code,GitHub和Bitbucket等公共存储库上有许多免费的用户包可用。

此外,GitHub上还有一个向贡献者开放的 Sublime Text组织

包与魔法

Sublime Text处理包的方式中几乎没有隐形魔法。两个值得注意的例外是任何包中定义的宏都出现在 Tools | Macros | <Your Package>,以及任何包中的代码段显示在 Tools | Snippets | <Your Package>

然而,正如开头所提到的,包有一些规则。 例如,在软件更新期间,Package/User 永远不会被破坏。

合并与优先顺序

Packages/DefaultPackages/User 在合并文件时也会受到特殊处理(例如 .sublime-keymap.sublime-settings 文件)。在合并之前,文件必须按顺序排列。为此,Sublime Text按名称按字母顺序对它们进行排序,但 DefaultUser 中包含的文件除外:Default 将始终显示在列表的前面,而 User 将结束。

恢复包

Sublime Text保留所有已安装软件包的副本,以便在需要时重新创建它们。这意味着它将能够重新安装核心软件包,随附的软件包和用户软件包。但是,只有作为 sublime-package 安装的用户软件包才会添加到已安装软件包的注册表中。如果删除它们,以其他方式安装的软件包将完全丢失。

将Sublime Text恢复为默认配置

要将Sublime Text恢复为其默认配置,请删除数据目录并重新启动编辑器。但请记住,Installed Packages 目录也将被删除,因此您将丢失所有已安装的软件包。

在采取像这样的极端措施之前,务必确保备份数据。

Installed Packages 目录

您将在数据目录中找到此目录。它包含每个安装的 sublime-package 的副本。用于恢复 Packages

Pristine Packages 目录

您将在数据目录中找到此目录。它包含每个运送和核心包的副本。用于恢复 Packages

命令行用法

Sublime Text包含一个名为 subl 的命令行帮助程序。使用命令行帮助程序,您可以打开文件和文件夹,并从命令行执行其他操作。

在使用 subl 之前,请确保它在您的 PATH 中。要将 subl 放在 PATH 中,您可能需要将目录添加到 PATH 或使用符号链接。

调用

subl [options] [files] 打开给定文件。
subl [options] [directories] 打开给定目录。
subl [options] - 编辑标准输入。

文件名可以给出 :line:line:column 后缀以在特定位置打开。 linecolumn 说明符是基于1的偏移量。

从标准输入读取仅适用于OS X。

选项

subl 命令行帮助程序接受一些选项。有关详细信息,请参阅下面的摘要。

--project <project> 加载给定的项目。
--command <command> 执行给定的命令。
--new-window, -n 打开一个新窗口。
--add, -a 将文件夹添加到当前窗口。
--wait, -w 在返回之前等待文件关闭。
--background, -b 不要激活该应用程序。
--stay, -s 关闭文件后保持应用程序激活。
--help, -h 显示帮助。
--version, -v 显示版本信息。
--project <project>

加载给定的项目。

project 参数指定要加载的 .sublime-project.sublime-workspace 文件。

--command <command>

执行给定的命令。

command 参数指定要运行的命令。

如果Sublime Text尚未运行,则只有 ApplicationCommands在从命令行调用时才能工作。如果Sublime Text已在运行,则从命令行调用时,WindowCommands也可以正常工作。

您还可以将参数传递给命令。参数必须通过空格与命令名分隔,并表示为JSON对象。像往常一样,你必须转义shell所要求的引号和其他字符。例如,这种语法可以在bash和PowerShell中使用: subl --command 'echo {\"foo\": 100}'

--new-window (-n)

打开一个新窗口。

Sublime Text的实例已在运行时应使用此选项。

--add (-a)

将文件夹添加到当前窗口。

将文件夹添加到当前窗口而不是打开新窗口。

--wait (-w)

在返回之前等待文件关闭。

例如,将Sublime Text用作版本控制系统(如git)的编辑器非常有用。如果从标准输入读取则隐含。

--background (-b)
不要激活该应用程序。
--stay (-s)

关闭文件后保持应用程序激活。

仅与 --wait 结合使用。

--help (-h)
显示帮助。
--version (-v)
显示版本信息。

参考内容

在这一部分中,你可以找到Sublime Text中许多内容的详细信息。

如果你只是想找找关于这些主题的介绍性质的内容,可以去文档的主页看看。

代码片段

与Textmate的兼容性

Sublime Text的代码片段与Textmate的代码片段基本兼容。

文件格式

代码片段文件是有 sublime-snippet 后缀的XML文件。

<snippet>
    <content><![CDATA[]]></content>
    <tabTrigger></tabTrigger>
    <scope></scope>
    <description></description>
</snippet>
content
实际的代码片段内容。
tabTrigger
与这段代码片段关联的隐式按键绑定。最后一个(隐式的)按键式 TAB
scope
适用于这段代码片段的作用域选择子。
description
为了菜单项准备的用户友好的说明性文字。

转义序列

\$
Literal $.
\$
常量 $

环境变量

$PARAM1 .. $PARAMn 传递给 insertSnippet 命令的各个参数。
$SELECTION 代码片段被触发的时候选中的文本内容。
$TM_CURRENT_LINE 代码片段被触发的时候光标所在行的内容。
$TM_CURRENT_WORD 代码片段被触发的时候光标所在的单词。
$TM_FILENAME 正在编辑的文件名称,包含文件扩展名。
$TM_FILEPATH 正在编辑的文件的文件路径。
$TM_FULLNAME 用户的用户名。
$TM_LINE_INDEX 插入代码片段的列的位置,位置是从0开始计数的。
$TM_LINE_NUMBER 插入代码片段的行的位置,位置是从1开始计数的。
$TM_SELECTED_TEXT $SELECTION 是等价的。
$TM_SOFT_TABS translateTabsToSpaces 选项是真的时候,值是 YES ,否则为 NO
$TM_TAB_SIZE tab对应的空格数(受 tabSize 选项的控制)。

字域

标记代码片段中可以通过 TABSHIFT + TAB 循环的各个位置。

语法: $1 .. $n

$0
退出标记。当循环到这个标记的时候,编辑器应该返回至正常的编辑模式。默认情况下,Sublime Text在 content 元素内容的结尾位置隐式的添加这个标记。

有相同名字的字域互相映射。

占位符

带有默认值的字域。

语法: ${1:PLACE_HOLDER} .. ${n:PLACE_HOLDER}

字域和占位符可以遇其他的站位符进行组合和嵌套。

替换

Syntax: 语法:

  • ${var_name/regex/format_string/}
  • ${var_name/regex/format_string/options}
var_name
替换展开所以来的字域的名字:1,2,3……
regex
Perl风格的正则表达式:关于 正则表达式 ,请参考Boost库的文档。
format_string
参考Boost库文档的 格式字符串 内容。
options
可选的。可以选择下面的任何一个:
i
忽略大小写敏感的正则。
g
替换所有匹配 regex 的内容。
m
在字符串中不要忽略换行符。

语法定义

Warning

这部分内容仍处于草稿阶段,并可能包含错误信息。

与Textmate的兼容性

Sublime Text的语法定义内容基本上与Textmate的语法定义文件是相互兼容的。

文件格式

语法定义文件是以 tmLanguage 作为扩展名的Plist(属性列表)文件。然而,在本文档中,我们将使用 JSON文件来进行讲解,然后再将JSON文件转换为Plist文件。

{ "name": "Sublime Snippet (Raw)",
  "scopeName": "source.ssraw",
  "fileTypes": ["ssraw"],
  "patterns": [
      { "match": "\\$(\\d+)",
        "name": "keyword.ssraw",
        "captures": {
            "1": { "name": "constant.numeric.ssraw" }
         },
        "comment": "Tab stops like $1, $2..."
      },
      { "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
        "name": "keyword.ssraw",
        "captures": {
            "1": { "name": "constant.numeric.ssraw" }
         },
        "comment": "Variables like $PARAM1, $TM_SELECTION..."
      },
      { "name": "variable.complex.ssraw",
        "begin": "(\\$)(\\{)([0-9]+):",
        "beginCaptures": {
            "1": { "name": "keyword.control.ssraw" },
            "3": { "name": "constant.numeric.ssraw" }
         },
         "patterns": [
            { "include": "$self" },
            { "name": "string.ssraw",
              "match": "."
            }
         ],
         "end": "\\}"
      },
      { "name": "constant.character.escape.ssraw",
        "match": "\\\\(\\$|\\>|\\<)"
      },
      { "name": "invalid.ssraw",
        "match": "(\\$|\\>|\\<)"
      }
  ],
  "uuid": "ca03e751-04ef-4330-9a6b-9b99aae1c418"
}
name
所定义语法的描述性名称。这个名称显示在Sublime Text界面右下角的下拉菜单中。通常情况下, name 表示的是 编程语言或其他标记语言的名称。
scopeName
语法定义文件起效的顶级坐拥域名称。这个名称一般是 source.<语言名称> 或者 text.<语言名称> 。 如果是在定义编程语言的语法,那么就使用 source 这个名称,否则使用 text 作为名称。
fileTypes
记录适用于这个语法文件的文件扩展名的数组。数组中的每项是去掉”.”的文件扩展名称。
uuid
这个语法定义的唯一标示符。目前被忽略。
foldingStartMarker
目前被忽略,用于标示折叠内容的开始。
foldingStopMarker
目前被忽略,用于标示折叠内容的结束。
patterns
记录与缓冲区中的文字进行匹配的模式的数组。
repository
从模式元素中抽象出来的数组。定义这个数组一方面有助于保持语法定义文件整洁,另一方面也能为像 递归模式这样的功能服务。这个内容是可选的。

模式数组

patterns 数组中包含的元素。

match

包含下列原素:

match 用于搜索的模式。
name 设置被 match 匹配到的内容所具有的作用域。
comment 可选。只是为了提供信息。
captures 可选。是对 match 的精炼。见下文解释

captures 内容可以包含 组下面要说明的元素对:

0..n 被索引的组的名字。
name 组内元素具有的作用域。

示例:

// Simple

{ "name": "constant.character.escape.ssraw",
  "match": "\\\\(\\$|\\>|\\<)"
  "comment". "Sequences like \$, \> and \<"
}

// With captures

{ "match": "\\$(\\d+)",
  "name": "keyword.ssraw",
  "captures": {
      "1": { "name": "constant.numeric.ssraw" }
   },
  "comment": "Tab stops like $1, $2..."
}
include

在仓库中包含其他的语法定义内容或者当前定义的内容。

References:

$self 当前的语法定义。
#itemName 仓库中名为 “itemName” 的内容。
source.js 外部的语法定义。

示例:

// Requires presence of DoubleQuotedStrings element in the repository.
{ "include": "#DoubleQuotedStrings" }

// Recursively includes the current syntax definition.
{ "include": "$self" }

// Includes and external syntax definition.
{ "include": "source.js" }
begin..end

定义一个可以跨多行的作用域。

包含下面的一些元素:

begin 模式的开始标志。
end 模式的终止标志。
name 整个区域的作用域名称。
beginCaptures begin 准备的 captures。请参考 captures
endCaptures end 准备的 captures。请参考 captures
patterns 与正文内容进行配对的 patterns
contentName 除掉标志符之后的内容的作用域名称。

示例:

{ "name": "variable.complex.ssraw",
  "begin": "(\\$)(\\{)([0-9]+):",
  "beginCaptures": {
      "1": { "name": "keyword.control.ssraw" },
      "3": { "name": "constant.numeric.ssraw" }
   },
   "patterns": [
      { "include": "$self" },
      { "name": "string.ssraw",
        "match": "."
      }
   ],
   "end": "\\}"
}

仓库

include 元素中,既可以从 patterns 中饮用,也可以从自身引用。请参考 include 章节来了解更多信息。

仓库可以包含下列元素:

  • Simple elements:

    "elementName": {
      "match":  "some regexp",
      "name":   "some.scope.somelang"
    }
    
  • Complex elements:

    "elementName": {
      "patterns": [
        { "match":  "some regexp",
          "name":   "some.scope.somelang"
        },
        { "match":  "other regexp",
          "name":   "some.other.scope.somelang"
        }
      ]
    }
    

示例:

"repository": {
  "numericConstant": {
    "patterns": [
      { "match":  "\\d*(?<!\\.)(\\.)\\d+(d)?(mb|kb|gb)?",
        "name":   "constant.numeric.double.powershell",
        "captures": {
          "1": { "name": "support.constant.powershell" },
          "2": { "name": "support.constant.powershell" },
          "3": { "name": "keyword.other.powershell" }
          }
      },
      { "match":  "(?<!\\w)\\d+(d)?(mb|kb|gb)?(?!\\w)",
        "name":   "constant.numeric.powershell",
        "captures": {
          "1": { "name": "support.constant.powershell" },
          "2": { "name": "keyword.other.powershell" }
          }
      }
    ]
  },
  "scriptblock": {
    "begin":  "\\{",
    "end":    "\\}",
    "name":   "meta.scriptblock.powershell",
    "patterns": [
      { "include": "$self" }
    ]
  },
}

转义序列

请确保对JSON/XML序列内容进行正确的转义。

构建系统

构建系统可以让您通过外部程序来运行文件,并可以在Sublime Text查看输出。

构建系统包括两 – 或者说三个 – 部分

  • 使用JSON格式保存配置文件 (.sublime-build 内容)
  • 使用Sublime Text命令来驱动构建过程
  • 还包括一个外部的可执行程序(脚本或者二进制)

从根本上来讲,.sublime-build 配置文件对于外部可执行程序与前面提到的Sublime Text命令是一样的。在配置文件中可以指定开关、配置以及环境变量。

Sublime Text命令从 .sublime-build 中读取配置数据,然后根据需要 构建 这些文件。 构建系统缺省会使用 exec 命令,该命令在 Packages/Default/exec.py 中实现。 在后续的讲解中,我们会重写这个命令。

外部程序可能是你用来处理文件的脚本,也可以能是类似 maketidy 这类的命令。通常,这些可执行文件从配置中获取文件路径或者目录以及运行是需要的开关及选项。

注意,构建系统可以完全不依赖调用外部程序,完全可以通过Sublime Text

文件格式

.build-system 文件使用JSON. 以下是一个例子:

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python"
}

选项

cmd

包括命令及其参数数组。如果不指定绝对路径,外部程序会在你系统的 PATH 环境变量中搜索。

On Windows, GUIs are supressed.

在Windows 系统中,*TBT*

file_regex
可选。 Perl格式的正则表达式可以获取 cmd 的错误输出,详情参考下一节

line_regex

可选。当 file_regex 与该行不匹配,如果 line_regex 存在,并且确实与当前行匹配, 则遍历整个缓冲区,直到与 file regex 匹配的行出现,并用这两个匹配决定最终要跳转的文件 或行。
selector
可选。在选定 Tools | Build System | Automatic 时使用。Sublime Text使用这个 选择器自动为活动试图选择构建系统。
working_dir
可选。在运行 cmd 前会切换到该目录。运行结束后会切换到原来的目录。
encoding
可选。输出 cmd 的编码。必须是合法的Python编码,缺省为 UTF-8
target
可选。运行的Sublime Text命令,缺省为 exec ( Packages/Default/exec.py )。该命令从 .build-system 中获取配置数据。 用来替代缺省的构建系统命令。注意,如果你希望替代构建系统的缺省命令,请在 .sublime-build 文件中专门设置。
env
可选。在环境变量被传递给 cmd 前,将他们封装成词典。
shell
可选。如果该选项为 truecmd 则可以通过shell运行。
path

可选。该选项可以在调用 cmd 前替换当前进程的 PATH 。原来的 PATH 将在运行后恢复。

使用这个选项可以在不修改系统设置的前提下将目录添加到’ PATH 中。

variants
可选。用来替代主构建系统的备选。如果构建系统的选择器与激活的文件匹配,变量的 名称 则会出现在 Command Palette 中。
name
仅在variant中是合法的 (详见 variants)。用来标识系统中不同的构建系统。如果 nameRun ,则会显示在 Tools | Build System 下,并且可以使用 Ctrl + Shift + B 调用。
使用 ``file_regex``获取错误输出

file_regex 选项用Perl的正则表达式来捕获构建系统的错误输出,主要包括四部分内容,分别是 file nameline numbercolumn numbererror message 。Sublime Text 在匹配模式中使用分组的方式捕获信息。 file nameline number 域是必须的。

当错误信息被捕获时,你可以使用 F4Shift+F4 在你的项目文件中跳转。被捕获的 错误信息 会显示在状态栏。

平台相关选项

windows, osx 以及 linux 元素可以帮助你在构建系统中设定平台相关的选项,举例如下:

{
    "cmd": ["ant"],
    "file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",
    "working_dir": "${project_path:${folder}}",
    "selector": "source.java",

    "windows":
    {
        "cmd": ["ant.bat"]
    }
}

在这个例子中,ant 在除了Windows之外的平台中都是执行 ant ,而在Windows中则执行 ant.bat

构建系统备选项

如下是一个带有备选项的构建系统实例:

{
    "selector": "source.python",
    "cmd": ["date"],

    "variants": [

        { "cmd": ["ls -l *.py"],
          "name": "List Python Files",
          "shell": true
        },

        { "cmd": ["wc", "$file"],
          "name": "Word Count (current file)"
        },

        { "cmd": ["python", "-u", "$file"],
          "name": "Run"
        }
    ]
}

根据以上的设定,按 Ctrl + B 会运行 date 命令, 按 Crtl + Shift + B 会运行Python解释器,并且在构建系统激活时将剩余的备选项显示在Command Palette中。

构建系统变量

.sublime-build 中包括如下构建系统变量。

$file_path 当前文件所在路径, 比如 C:\Files.
$file 当前文件的完整路径, 比如 C:\Files\Chapter1.txt.
$file_name 当前文件的文件名, 比如 Chapter1.txt.
$file_extension 当前文件的扩展名, 比如 txt.
$file_base_name 当前文件仅包含文件名的部分, 比如 Document.
$packages Packages 文件夹的完整路径.
$project 当前项目文件的完整路径.
$project_path 当前项目文件的路径.
$project_name 当前项目文件的名称.
$project_extension 当前项目文件的扩展部分.
$project_base_name 当前项目仅包括名的部分.
变量用法

可以在代码片段上中使用以上变量。例如:

${project_name:Default}

如果当前项目存在则使用该项目名称,否则则使用 Default 替代

${file/\.php/\.txt/}

该例会获取当前文件的完整路径,并用 .txt 替换路径中的 .php

运行构建系统

Tools | Build System 选择构建系统,然后选择 Tools | Build ,再按 F7

构建系统常见问题

如果你没有为构建系统指定一个可执行文件的绝对路径,构建系统怎么会在你的 PATH 中进行查找。 所以,你需要正确设置 PATH

在某些操作系统中,终端和图形化应用的 PATH 值会有所不同。所以即便你的构建系统在命令行下 可以正常工作,在Sublime Text也不见得能够正常。这与Shell中的用户设置有关。

为了解决这个问题,请确认你正确设置了 PATH ,以便类似Sublime Text一类的图形化应用 可以正确找到。更多内容,请参考一下链接

另外,你也可以在 .sublime-build 文件中设定 path 来替代 PATH ,并在 path 指定的路径中查找 cmd 可执行文件。新设定的值,仅在构建系统运行期间有效,过后将会恢复为原始的 PATH

See also

Managing Environment Variables in Windows
Search Microsoft knowledge base for this topic.
Setting environment variables in OSX
StackOverflow topic.

按键绑定

按键绑定为按键与动作建立了映射关系。

文件格式

对于按键绑定的配置存储于后缀为 .sublime-keymap 的文件中,文件中记录的是JSON内容。所有按键绑定 配置文件都需要按照如下模式命名: Default (<platform>).sublime-keymap 。否则,Sublime Text 将忽略这些文件。

平台相关的键位设置

每一个平台都有它自己的按键配置文件:

  • Default (Windows).sublime-keymap
  • Default (OSX).sublime-keymap
  • Default (Linux).sublime-keymap

也有针对不同的硬件提供商指定的 HCI 指导文档准备的按键配置文件。

一个按键绑定项的结构

键位表是一个按键绑定项的数组。接下来将要解释的是按键绑定中的有效构成元素:

keys
一组大小写敏感的按键组合。可以用 + 指定修饰符。向数组中添加元素可以设置组合键,例如: ["ctrl+k","ctrl+j"]
command
要执行的命令的名称。
args
传递给 command 命令的参数字典。字典中键的名称是 command 命令的参数名称。
context
选择性控制按键绑定是否起效的上下文内容数组。只有当所有上下文都为真时,按键绑定才能被触发。 请参考下面的 上下文的结构 内容来了解更多内容。

下面是一个说明上面提到的大部分特性的例子:

{ "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": "\n\t$0\n"}, "context":
        [
                { "key": "setting.auto_indent", "operator": "equal", "operand": true },
                { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
                { "key": "preceding_text", "operator": "regex_contains", "operand": "\\{$", "match_all": true },
                { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true }
        ]
}
上下文的结构
key
要请求的上下文操作符的名称。
operator
key 进行测试的类型。
operand
key 的结果进行测试的值。
match_all
需要多所有选择都进行测试。默认值为 false
上下文操作子
auto_complete_visible
如果自动不全列表可见就返回 true
has_next_field
当下一个代码片段域可用时返回 true
has_prev_field
当上一个代码片段域可用时返回 true
num_selections
返回当前选中的数目。
overlay_visible
当覆盖控件可见时返回 true
panel_visible
当有面板可见时返回 true
following_text
限制测试只对脱字号后的文本进行。
preceding_text
限制测试只对脱字号前的文本进行。
selection_empty
当没有选中内容的时候返回 true
setting.x
返回 x 设置项的值。 x 可以为任意字符串。
text
限制测试只对选中的文本有效。
selector
返回当前作用域。
上下文操作符
equal, not_equal
测试是否相等。
regex_match, not_regex_match
与一个正则表达式进行匹配。
regex_contains, not_regex_contains
与一个正则表达式进行匹配(检测是否包含)。

命令模式

Sublime Text提供一个称为 command_mode (命令模式)的设置项,启用这个设置可以阻止按键内容 被送往缓冲区。这个设置项在模拟Vim的模式功能的时候很有用处。

可绑定的按键

按键可以通过字面值或者名字来指定。你可以在下面找到一个有效名称的列表:

  • up
  • down
  • right
  • left
  • insert
  • home
  • end
  • pageup
  • pagedown
  • backspace
  • delete
  • tab
  • enter
  • pause
  • escape
  • space
  • keypad0
  • keypad1
  • keypad2
  • keypad3
  • keypad4
  • keypad5
  • keypad6
  • keypad7
  • keypad8
  • keypad9
  • keypad_period
  • keypad_divide
  • keypad_multiply
  • keypad_minus
  • keypad_plus
  • keypad_enter
  • clear
  • f1
  • f2
  • f3
  • f4
  • f5
  • f6
  • f7
  • f8
  • f9
  • f10
  • f11
  • f12
  • f13
  • f14
  • f15
  • f16
  • f17
  • f18
  • f19
  • f20
  • sysreq
  • break
  • context_menu
  • browser_back
  • browser_forward
  • browser_refresh
  • browser_stop
  • browser_search
  • browser_favorites
  • browser_home
修饰符
  • shift
  • ctrl
  • alt
  • super (Windows key, Command key…)
  • super (在Windows平台为Windows键,在OS X平台为Command键……)
关于可绑定按键的警告

如果你正在开发一个包,请谨记下面几点:

  • 在Windows平台上,不要使用 Ctrl+Alt+<alphanum> 进行任何键位绑定。
  • 在OS X平台上,不要使用 Option+<alphanum> 进行任何键位绑定。

在以上两种情况下,用户都将在插入非ascii字符时遇到问题。

如果你是终端用户,你可以随意重新映射这些按键组合。

让按键映射井井有条

Sublime Text自带的按键组合存放在 Packages/Default 目录下。其他包组可以包含它们特有的按键 映射文件。对于你自己的键位映射设置而言,推荐的文件存放地址是 Packages/User 目录。

请参考 排序与优先级顺序 以了解关于Sublime Text排序文件并进行合并的更多信息。

国际化键盘

根据Sublime Text将按键名称与物理按键进行映射的方式,此二者在不同平台上可能有不同的配对。

常见问题解答

使用 sublime.log_commands(flag) 开启命令日志。这对于调试按键映射有所帮助。

设置项(参考内容)

全局设置项

对应文件: Global.sublime-settings

theme
系统使用的主题文件。接受主题文件的名称(例如: Default.sublime-theme )。
remember_open_files
设置Sublime Text启动时是否需要打开上次关闭时打开了的缓冲区。
folder_exclude_patterns
与匹配模式相符的目录将不会出现在侧边栏、快速跳转面板等位置。
file_exclude_patterns
与匹配模式相符的文件将不会出现在侧边栏、快速跳转面板等位置。
scroll_speed
如果把值设为 0 ,将禁止平滑滚动。取 01 之间的数值将使滑动变的比较缓慢,取大于 1 的值使得滑动更加迅速。
show_tab_close_buttons
如果设置为 false ,通常情况下就不会显示标签页的关闭按钮,只有当鼠标移动到标签上时才显示。
mouse_wheel_switches_tabs
如果设置为 true ,在标签区域滑动鼠标滚轮会触发标签页之间的切换。
open_files_in_new_window
仅在OS X平台有效。当用户从Finder中开打文件,或者把文件拖拽到dock面板的图标上,这个设置项将决定 是否需要创建一个新窗口。

文件设置项

对应文件: Base File.sublime-settings<file_type>.sublime-settings

空格与缩进
auto_indent
开/关自动缩进选项。
tab_size
设置tab键对应的空格数。
translate_tabs_to_spaces
设置当用户按下 Tab 键时,是否需要用 tab_size 选项所指定数目的空格进行替换。
use_tab_stops
如果 translate_tabs_to_spaces 选项为 true ,设置这个选项就使得每次按下 TabBackspace 键时,将插入/删除 tab_size 选项所指定数目的空格。
trim_automatic_white_space
开/关对由 auto_indent 选项自动添加的只有空格的行的检测。
detect_indentation
如果设置为 false ,当系统加在缓冲区内容的时候,就会停止对tab与空格的检测。如果设置为 true 则会自动修改 translate_tabs_to_spaces 以及 tab_size 的值。
draw_white_space
有效值: noneselectionall
trim_trailing_white_space_on_save
将这个选项设置为 true 就会在文件保存时候自动去处行为的空格。
显示设置项
color_scheme
设置文本高亮的配色方案。接受从数据目录开始的相对路径(例如: Packages/Color Scheme - Default/Monokai Bright.tmTheme)。
font_face
设置可编辑文本的字体样式。
font_size
设置可编辑字体的字体大小。
font_options
有效值:bolditalicno_antialiasgray_antialiassubpixel_antialiasdirectwrite (对Windows平台有效)。
gutter
开/关侧边栏选项。
rulers
设置标尺所在的列坐标。接受一个数字值的列表(例如 [79, 89, 99] 或者一个单一的数字值 79)。
draw_minimap_border
如果将这个值设置为 true ,就将根据视图当前可见文本的内容在迷你地图区域画一个边框。当前选中的 配色方案中的 minimapBorder 键对应的值用于控制边框的颜色。
highlight_line
将这个值设置为 false 来阻止高亮当前光标所在行。
line_padding_top
每行文字与上一行的额外距离,以像素为单位。
line_padding_bottom
每行文字与下一行的额外距离,以像素为单位。
scroll_past_end
设置为 false 以关闭超出缓冲区的滚动。如果设置为 true ,Sublime Text将在文本的最后一行 与窗口下边界之间添加一大块空白区域。
line_numbers
开/关对行号的显示。
word_wrap
如果设置为 false 那么对于内容很多的行,文本将被截取,而不会自动换行。在水平方向拖动滚动条可以 查看被截取的文字。
wrap_width
如果这个值大于 0 , 系统就会在这个指定的列进行换行切分;否则会根据屏幕的宽度进行换行。这个值 只有在 wrap_width 设置为 true 的时候才有效果。
indent_subsequent_lines
如果这个值设置为 false ,被转换的行就不会进行缩进。只有在 wrap_widthtrue 时 才有效。
draw_centered
如果设置为 true ,文本将居中对齐,否则为左对齐。
match_brackets
当值设置为 false 时,光标放在括号周围的时候就不会显示下划线。
match_brackets_content
设置光标在括号周围时,是否要高亮括号中的内容。
match_brackets_square
如果设置项值为 false ,就停止对方括号的配对显示。只有在 match_brackets 值为 true 时有效。
match_bracktets_braces
如果设置项值为 false ,就停止对花括号的配对显示。只有在 match_brackets 值为 true 时有效。
match_bracktets_angle
如果设置项值为 false ,就停止对尖括号的配对显示。只有在 match_brackets 值为 true 时有效。
自动行为设置项
auto_match_enabled
开/关自动配对引号、括号等符号。
save_on_focus_lost
如果这个值为真,那么当用户切换到一个不同的文件,或不同的应用程序时,文件的内容将会自动保存。
find_selected_text
如果设置为 true ,那么当打开搜索面板时,当前选中的文字会被自动的复制到搜索面板中。
word_separators
设置在动作中用于分割单词的字符,例如光标跨单词移动的时候来界定单词的分隔符。这个单词分隔符并 不用于所有需要区分单词的情况(例如:换行时不切分单词)。在这种情况下,文本是基于其他标准来界 定的(例如:语法定义规则)。
ensure_newline_at_eof_on_save
如果文本末尾没有空行,那么当保存文件的时候,会自动在文件末尾添加一个空行。
系统与其他设置项
is_widget
当缓冲区为输入对话框中的输入域的时候,返回 true
spell_check
开/关拼写检查选项。
dictionary
拼写检查器可选的单词列表。接受从数据目录开始的一个路径(例如: Packages/Language - English/en_US.dic )。 你也可以 添加更多目录
fallback_encoding
控制当无法自动判断编码的时候选用的默认编码。系统可以自动检测的编码包括ASCII,UTF-8以及UTF-16.
default_line_ending
控制系统使用的换行符的字符。有效选项: system (OS相关), windows (即 CRLF )以及 unixLF )。
tab_completion
控制按下 Tab 时是否进行补全。
构建与错误导航设置项
result_file_regex
用于过滤视图或输出面板中的错误信息的正则表达式。这里的正则表达式遵循与构建系统中的错误捕获相同的规则。
result_line_regex
用于过滤视图或输出面板中的错误信息的正则表达式。这里的正则表达式遵循与构建系统中的错误捕获相同的规则。
result_base_dir
设置基于 result_file_regex 以及 result_line_regex 抽取出来的信息开始搜索的文件路径。
build_env
默认添加到构建系统中的路径列表。
文件与目录设置项
default_dir
设置视图对应的默认保存路径。
输入设置项
command_mode
如果将这个值设为 true ,则缓冲区将忽略用户按键。这对模拟Vim很有帮助。

补全

补全提供了像IDE那样的使用补全列表或者 Tab 键插入动态内容的功能。

文件格式

补全信息是以 .sublime-completions 作为扩展名的JSON文件。

补全列表的结构

scope
控制补全是否应该在这个文件中发挥作用。参考 作用域与作用域选择子 来了解更多信息。
completions
补全的数组。

下面是从html补全列表中截取出来的一部分:

{
        "scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",

        "completions":
        [
                { "trigger": "a", "contents": "<a href=\"$1\">$0</a>" },
                { "trigger": "abbr", "contents": "<abbr>$0</abbr>" },
                { "trigger": "acronym", "contents": "<acronym>$0</acronym>" }

        ]
}

补全的类型

纯文本字符串

当某个补全项 trigger 的内容与 contents 的内容完全一样的时候,纯文本字符串与这个补全项 是等价的。

“foo”

# is equivalent to: # 等价于:

{ “trigger”: “foo”, “contents”: “foo” }

基于触发内容的补全
trigger
在补全列表中显示的文本,在被确认后,对应的 contents 内容被插入到缓冲区中。
contents
要插入到缓冲区中的文本。可以使用代码片段的特性。

补全的来源

用户可以控制的补全来源包括:

  • .sublime-completions
  • EventListener.on_query_completions()

除此之外,其他在最终补全列表中可以显示的内容包括:

  • Snippets
  • Words in the buffer
  • 代码片段
  • 缓冲区中的单词
补全来源的优先级
  • 代码片段
  • 使用API插入的补全内容
  • .sublime-completions 文件
  • 缓冲区中的单词

代码片段只有在与设置的tab触发器精确匹配时才会被插入。其他类型的补全则是使用大小写不敏感的模糊 搜索进行匹配。

补全列表

要使用补全列表需要:

  • Ctrl+空格 来打开补全列表
  • 可选的, 再次按下 Ctrl+空格 来选择下一个候选项
  • 按下 回车 or Tab 来确认选择

Note

补全列表中被选中的当前项可以用任何没有被绑定到代码片段触发器中的标点符号来确认插入。

代码片段以如下形式出现在补全列表中:<tab触发器> : <名称> 。对于其他补全项,你只能看到要被 插入的文本。

当补全列表被缩减到只有一个候选项时,系统就会绕开自动补全对话框,根据之前介绍的优先级,对应内容 会被直接插入。

为补全列表启用或禁用Tab补全

tab_completion 选项默认是 true 。如果你想停止 Tab 键对最可能选项的索引功能, 就把这个值设置为 false 。这个设置项对定义在 .sublime-snippet 文件中的触发器没有效果, 因此按下 Tab 时,代码片段一定会被插入。

选项开启的时候,上面介绍的优先级顺序仍然有效,但是,与补全列表不同的是, Sbulime Text总会插入一个补全项,及时选择项存在模糊内容。

插入一个Tab(缩进)字符

如果 tab_completion 值为 true ,你可以使用 Shift+Tab 来插入一个缩进字符。

命令面板

命令面板由 .sublime-commands 文件中的各项组成.

文件格式 (.sublime-commands 文件)

如下是来自 Packages/Default/Default.sublime-commands 的实例:

[
    { "caption": "Project: Save As", "command": "save_project_as" },
    { "caption": "Project: Close", "command": "close_project" },
    { "caption": "Project: Add Folder", "command": "prompt_add_folder" },

    { "caption": "Preferences: Default File Settings", "command": "open_file", "args": {"file": "${packages}/Default/Base File.sublime-settings"} },
    { "caption": "Preferences: User File Settings", "command": "open_file", "args": {"file": "${packages}/User/Base File.sublime-settings"} },
    { "caption": "Preferences: Default Global Settings", "command": "open_file", "args": {"file": "${packages}/Default/Global.sublime-settings"} },
    { "caption": "Preferences: User Global Settings", "command": "open_file", "args": {"file": "${packages}/User/Global.sublime-settings"} },
    { "caption": "Preferences: Browse Packages", "command": "open_dir", "args": {"dir": "$packages"} }
]
caption
显示在命令面板中的标题.
command
代执行的命令.
args
传给 command 的参数。 需要注意的是,要定位包所在目录,需要使用 ${packages} 或 $packages。由于底层的实现不同,这与在编辑器的其他区域的用法略有不同。

如何使用命令面板

  1. Ctrl+Shift+P
  2. 选择命令

显示的选项会根据上下文不同有所区别,并不是在任何时候都会显示所有选项。

插件

See also

API参考文档
有关Python API的更详细的信息。

插件是实现了 sublime_plugin 模块中 *Command 类的Python脚本。

插件放到哪里

Sublime Text 2在以下这些目录中寻找可用插件:

  • Packages
  • Packages/<pkg_name>
  • Packages/<包名称>

存放在 Packages 更深层次的目录结构中的插件不会被加载。

任何插件都应该又自己单独的目录,而不应该直接放在 Packages 目录下。

命令名称的命名规则

Sublime Text 2遵循 CamelCasedPhrases 命名规则来定义命令类,同时用 Command 作为后缀。

然而,Sublime Text 2将类名从 CamelCasedPhrases 形式自动转换成 camel_cased_phrases 。 举例来说, ExampleCommand 将被转换为 example ,而 AnotherExampleCommand 将 转换为 another_example

对于类定义名称,可以使用 CamelCasedPhrasesCommand 命名方式;要从API中调用一个命令,请使用 标准化后的名称( camel_cased_phrases )。

命令类型

  • sublime_plugin.ApplicationCommand
  • sublime_plugin.WindowCommand
  • sublime_plugin.TextCommand
  • sublime_plugin.EventListener

WindowCommand 类的实例都有一个 .window 属性,指向创建他们的那个窗口实例。于此类似, TextCommand 类的实例拥有 .view 属性。

命令之间的共享特性

所有命令都必须实现一个 .run() 方法。 所有命令都可以接受任意长度的关键字参数,但是这些参数一定要是有效的JSON类型。

如何利用API调用命令

Use a reference to a View or a Window, or sublime depending on the type of command, and call object.run_command('command_name'). In addition, you can pass a dictionary where keys are names of parameters to command_name.

window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})

命令参数

用户提供给命令的所有参数都必须是有效的JSON类型。只有Sublime Text可以给命令传递其他类型的参数(例如修改对象,视图实例等等)。

根据命令的类型来选择对 ViewWindow 或者 sublime 的引用,然后通过 object.run_command('command_name') 来调用。 除此之外, 你可以用字典作为参数,字典中的键就是要传给 command_name 的参数名称:

window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})

文本命令以及 修改 对象

关于两个文本命令的两个较为重要的API是 view.begin_edit()view.end_edit() 。 其中 view.begin_edit() 可以接受一个可选的命令名称和可选的参数字典;而 view.end_edit() 用来结束编辑过程。

在修改过程中发生的所有动作都被整合成一个单一的撤销动作。当编辑过程结束的时候,类似与 on_modifiedon_selection_modified() 的回调函数会被触发。

有一点非常重要,每次调用 view.begin_edit() 之后必须调用 view.end_edit() 方法,否则 缓冲将处于一种不一致状态。在不匹配发生时,系统将尝试自动进行修正,但是这种自动修正的发生频率并 没有你想象的那么多,同时会在控制台输出一条警告信息。换句话说,你应该始终使用 try..finally 来包裹代码快。

传递给 begin_edit() 的命令名称用于重复、宏录制以及撤销/重复过程中的动作描述。如果你在 TextCommand 外面做修改,你就不该指定命令名称。

你可以在开始的时候创建一个修改对象,然后调用了一个方法又创建了另外的一个修改对象:只有当最外层 的修改对象执行了 end_edit() 方法之后,系统才认为整个修改都完成了。

与群组修改类似,你也可以使用修改对象把对选中文本做的修改组合成一个群组,对它们的修改只要一步就 能撤销。

对事件的响应

任何 EventListener 的子类都能够响应事件。对于任何一个类,不能同时继承 EventListener 和其他任何的命令类。

Python与标准库

Sublime Text集成了一个精简版的标准库。被裁剪掉的模块包括 Tkintermultiprocessing 以及 sqlite3

自动插件重载

当你对插件做修改的时候(比如你正在修改一个 .py 文件),Sublime Text会自动加载包中的顶级 Python模块。值得注意的是Python的子模块不会被自动重新加载;这一点在插件开发中可能会产生一些挺 奇葩的问题。一般来说,当你对插件文件做修改之后,最好重启以下Sublime Text,这样能保证你做的修 改能发挥作用。

多线程

只有 .set_timeout() 方法可以安全的从其他线程调用。

Python API

浏览 API

快速查看API的方法:

  1. Packages\Default (Preferences | Browse Packages…) 添加到你的项目中.
  2. 按下组合键 CTRL + SHIFT + F
  3. In Files: 栏中输入 *.py
  4. 检查 Use Buffer 选项
  5. 搜索 API 名字
  6. F4
  7. 学习相关的源代码

命令

概览

对命令列表的整理仍在进行中。

关于命令参数中的路径信息

有些命令把路径作为参数。这些命令中,有些支持代码片段那样的语法,有些则不支持。第一中类型的命令 可以接受类似 ${packages}/SomeDir/SomeFile.Ext 这样的参数,而第二种类型的命令可以接受类似 Packages/SomeDir/SomeFile.Ext 这样的参数。

大体上来说,较新引入的命令支持类似代码片段的语法。

通常情况下,认为命令参数中的相对路径是相对与 数据 目录来说的。

参数中路径包含的变量

构建系统中使用的变量在参数中也可以使用。参考 构建系统变量 来了解更多信息。

命令列表

build

运行某个构件系统。

  • variant [String]: 可选参数。要运行配置的名称。
run_macro_file

运行一个 .sublime-macro 文件。

  • file [String]: 宏文件路径。
insert_snippet

从字符串或者 .sublime-snippet 文件中插入一个代码片段。

  • contents [String]: 要插入的代码片段的字符串内容。
  • name [String]: 要插入的 .sublime-snippet 文件的路径。
insert

插入一个字符串。

  • characters [String]: 要插入的字符串内容。
move

根据指定的单位移动光标。

  • by [Enum]: 可选值: characters, words, word_ends, subwords, subword_ends, lines, pages, stops
  • forward [Bool]: 在缓冲区中向前或向后移动。
  • word_begin [Bool]
  • empty_line [Bool]
  • punct_begin [Bool]
  • separators [Bool]
move_to

将光标移动到指定位置。

  • to [Enum]: 可选值: bol, eol, bof, eof, brackets.
  • extend [Bool]: 是否扩展选择内容。默认值是 false
new_window
打开一个新的窗口。
close_window
关闭当前活跃窗口。
switch_file

在有相同文件名、不同扩展名的两个文件之间进行切换。

  • extensions [[String]]: 切换可以发生的文件扩展名(不包括点号)。
close
关闭当前视图。
close_file
关闭当前视图,在某些情况下关闭整个应用程序。 XXX 看上去好像不对。
toggle_sidebar
开启或关闭侧边栏。
toggle_full_screen
开启或退出全屏模式。
toggle_distraction_free
开启或退出免打扰模式。
left_delete
删除光标前的那个字符。
right_delete
删除光标后的那个字符。
undo
撤销上次操作。
redo
重做上次撤销的操作。
redo_or_repeat
再次执行上次的动作。
soft_undo
先移动到编辑位置再进行撤销操作。
soft_redo
先移动到编辑位置再进行重做操作。
cut
把当前选中的文字从缓冲区中移除,并送到系统剪贴板中。换句话说,执行剪切操作。
copy
把当前选中的文字送到系统剪贴板中。
paste
把剪贴板中的内容插入到光标后。
paste_and_indent
把剪贴板中的内容插入到光标后同时根据上下文进行缩进。
select_lines

在当前选择的内容中添加一行。

  • forward [Bool]: 添加下一行还是上一行。默认值是 true
scroll_lines

在视图中滚动行。

  • amount [Float]: 正值向下滚动,负值向上滚动。
prev_view
切换到上一个视图。
next_view
切换到下一个视图。
next_view_in_stack
切换到最近的活跃视图。
previous_view_in_stack
切换到最近活跃视图的前一个活跃视图。我不认为这种说法非常确切,这么说甚至是不正确的。
select_all
选择视图的全部内容。
split_selection_into_lines
不出所料的,把当前的选择切散成不同行。
single_selection
把多重选择整合成单一选择。
clear_fields
跳出活跃代码片段域的选择。
hide_panel

隐藏当前活跃面板。

  • cancel [Bool]: 当面板打开的时候恢复它之前选择的内容。(仅对增量搜索面板有效。)
hide_overlay
隐藏覆盖控件。使用 show_overlay 命令打开覆盖控件。
hide_auto_complete
隐藏自动补全列表。
insert_best_completion

插入根据当前上下文能推断出的最佳补全内容。 XXX 可能没什么用。 XXX

  • default [String]: 当没有找到最佳补全内容时插入的字符串。
replace_completion_with_next_completion
XXX 对用户来说没什么用。 XXX
reindent

XXX ??? XXX

(译者注:重新进行缩进操作,常用于整理文件缩进。)

indent
增加缩进。
next_field
将光标移动到下一个代码片段中的可修改区域。
prev_field
将光标移动到上一个代码片段中的可修改区域。
commit_completion
向缓冲区中插入自动补全列表中当前选中项的内容。 XXX 对用户来说没很么用。 XXX
unindent
取消缩进。
toggle_overwrite
开启关闭覆盖插入选项。
expand_selection

将选择内容扩展到预定义的边界。

  • to [Enum]: 可选值: bol, hardbol, eol, hardeol, bof, eof, brackets, line.
find_under_expand
根据当前选中的内容增加一个新的选择或者把选择项扩展到当前单词。
close_tag
为当前内部文本添加适当的标签。
toggle_record_macro
开始或关闭宏录制器。
run_macro
运行宏缓冲区中存储的宏脚本。
show_overlay

显示请求的覆盖控件。使用 hide_overlay 命令来隐藏覆盖控件。

  • overlay [Enum]:
    要显示的覆盖控件的类型。可选值:
  • show_files [Bool]: 如果显示快速跳转面板,开始的时候显示文件列表,而不是显示一个空的控件。
  • text [String]: 放到覆盖控件中的初始值。
show_panel

显示面板。

  • panel [Enum]: 可选值: incremental_find, find, replace, find_in_files, console
  • reverse [Bool]: 在缓冲区中是否后向搜索内容。
  • toggle [Bool]: 当面板已经可见时,是否隐藏面板。
find_next
找到当前搜索内容的下一个匹配项。
find_prev
找到当前搜索内容的上一个匹配项。
find_under
找到与当前选中内容或光标所在位置档次匹配的下一个内容。
find_under_prev
找到与当前选中内容或光标所在位置档次匹配的上一个内容。
find_all_under
选中与当前选择内容或光标所在位置单词匹配的所有内容。
slurp_find_string
复制当前选中内容或当前单词到搜索面板中的 “find” 域。
slurp_replace_string
复制当前选中内容或当前单词到搜索域替换面板中的 “replace” 域。
next_result
移动到下一个搜索到的结果。
prev_result
移动到上一个搜索到的结果。
toggle_setting

修改布尔型设置项的值。

  • setting [String]: 要修改的设置项的名称。
next_misspelling
移动到下一个错误拼写的单词的位置。
prev_misspelling
移动到上一个错误拼写的单词的位置。
swap_line_down
交换当前行与下一行。
swap_line_up
交换当前行与上一行。
toggle_comment

为当前行添加或取消注释。

  • block [Bool]: 是否使用块注释。
join_lines
把当前行与下一行连接起来。
duplicate_line
重复当前行内容。
auto_complete
打开自动补全列表。
replace_completion_with_auto_complete
XXX 对用户来说没什么用。 XXX
show_scope_name
在状态栏中显示光标所在作用域的名称。
exec

异步运行一个外部进程。

XXX 为所有选项添加文档。

transpose
移动内容。
sort_lines

对行进行排序。

  • case_sensitive [Bool]: 排序时是否考虑大小写。
set_layout
XXX
focus_group
XXX
move_to_group
XXX
select_by_index
XXX
next_bookmark
选择下一个被标记的区域。
prev_bookmark
选择上一个被书签标记的区域。
toggle_bookmark
对活跃区域设置书签或取消书签。(在区域API中使用 "bookmarks" 作为键可以访问书签内容。)
clear_bookmarks
清楚所有书签。
select_all_bookmarks
选择所有被书签标记过的区域。
wrap_lines

环绕行。默认情况下,在第一个标尺所在的列进行环绕。

  • width [Int]: 设置环绕开始的列坐标。
upper_case
把选择的内容改成大写。
lower_case
把选择的内容改成小写。
set_mark
XXX
select_to_mark
XXX
delete_to_mark
XXX
swap_with_mark
XXX
yank
XXX
show_at_center
XXX
increase_font_size
增加字体大小。
decrease_font_size
较少字体大小。
fold
XXX
unfold
XXX
fold_by_level
XXX
context_menu
显示上下文菜单。

Windows/Linux平台快捷键

Warning

本文处于草稿阶段,而且可能包含错误信息。

编辑

按键 对应命令
Ctrl + X 删除行
Ctrl + ↩ 行后插入
Ctrl + ⇧ + ↩ 行前插入
Ctrl + ⇧ + ↑ 上移文本/选择
Ctrl + ⇧ + ↓ 下移文本/选择
Ctrl + L 选择行 - 重复按键可以继续选择接下来的行
Ctrl + D 选择单词 - 重复按键选择单词的其他出现实例
Ctrl + M 跳转到闭合括号 再次按键将跳转到对应的起始括号
Ctrl + ⇧ + M 选择当前括号中的所有内容
Ctrl + KK 删除光标位置到行尾的全部内容
Ctrl + K + ⌫ 删除光标位置到行首的全部内容
Ctrl + ] 向后缩进选中行(可以为多行)
Ctrl + [ 向前缩进当前行(可以为多行)
Ctrl + ⇧ + D 重复当前行内容(可以为多行)
Ctrl + J 把下一行内容连接到当前行末尾
Ctrl + / 为当前行添加/删除注释
Ctrl + ⇧ + / 为当前选中内容增加块注释
Ctrl + Y 恢复,或者重复执行上个快捷键对应的命令
Ctrl + ⇧ + V 粘贴的同时完成自动缩进
Ctrl + Space 选择下一个自动补全提示
Ctrl + U 软撤销,即在撤销之前先跳转到上次修改的位置 再次按键执行撤销操作

导航/快速跳转

按键 对应命令
Ctrl + P 根据名称快速打开文件
Ctrl + R 跳转到指定符号
Ctrl + ; 跳转到当前文件中的某个单词
Ctrl + G 跳转到当前文件中的某一行

通用快捷键

按键 对应命令
Ctrl + ⇧ + P 命令提示
Ctrl + KB 开/关侧边栏
Ctrl + ⇧ + Alt + P 在状态栏中显示作用域

查找/替换

按键 对应命令
Ctrl + F 查找
Ctrl + H 替换
Ctrl + ⇧ + F 在文件中查找

标签页

按键 对应命令
Ctrl + ⇧ + t 打开最后关闭的标签页
Ctrl + PgUp 在标签页之间循环
Ctrl + PgDn 在标签页之间循环
Ctrl + ⇆ 文件中搜索
Alt + [NUM] 跳转到第 [NUM] 个标签页,这里 [NUM] 指标签的页数

分割窗口

按键 对应命令
Alt + ⇧ + 2 把窗口分割成两栏
Alt + ⇧ + 1 把窗口恢复成一栏
Alt + ⇧ + 5 把窗口分割成网格(4组)
Ctrl + [NUM] 跳转到1-4组中的某一组
Ctrl + ⇧ + [NUM] 把文件移动到1-4组中的某一组

书签

按键 对应命令
Ctrl + F2 开/关书签
F2 下一个书签
⇧ + F2 上一个书签
Ctrl + ⇧ + F2 清空书签

文本操作

按键 对应命令
Ctrl + KU 将文本转换为大写
Ctrl + KL 将文本转换为小写

macOS 平台快捷键

Warning

本文处于草稿阶段,而且可能包含错误信息。

编辑

按键 对应命令
⌘ + X 删除行
⌘ + ↩ 行后插入
⌘ + ⇧ + ↩ 行前插入
⌘ + ⌃ + ↑ 上移文本/选择
⌘ + ⌃ + ↓ 下移文本/选择
⌘ + L 选择行 - 重复按键可以继续选择接下来的行
⌘ + D 选择单词 - 重复按键选择单词的其他出现实例
⌃ + M 跳转到闭合括号 再次按键将跳转到对应的起始括号
⌃ + ⇧ + M 选择当前括号中的所有内容
⌘ + K, ⌘ + K 删除光标位置到行尾的全部内容
⌘ + K + ⌫ 删除光标位置到行首的全部内容
⌘ + ] 向后缩进选中行(可以为多行)
⌘ + [ 向前缩进当前行(可以为多行)
⌘ + ⇧ + D 重复当前行内容(可以为多行)
⌘ + J 把下一行内容连接到当前行末尾
⌘ + / 为当前行添加/删除注释
⌘ + ⌥ + / 为当前选中内容增加块注释
⌘ + Y 恢复,或者重复执行上个快捷键对应的命令
⌘ + ⇧ + V 粘贴的同时完成自动缩进
⌃ + Space 选择下一个自动补全提示
⌃ + U 软撤销,即在撤销之前先跳转到上次修改的位置 再次按键执行撤销操作

导航/快速跳转

按键 对应命令
⌘ + P or ⌘ + T 根据名称快速打开文件
⌘ + R 跳转到指定符号
  跳转到当前文件中的某个单词
⌃ + G 跳转到当前文件中的某一行

通用快捷键

按键 对应命令
⌘ + ⇧ + P 命令提示
⌘ + K, ⌘ + B 开/关侧边栏
⌃ + ⇧ + P 在状态栏中显示作用域

查找/替换

按键 对应命令
⌘ + F 查找
⌘ + ⌥ + F 替换
⌘ + ⇧ + F 在文件中查找

标签页

按键 对应命令
⌘ + ⇧ + t 打开最后关闭的标签页
^ + Tab 在标签页之间循环
⇧ + ^ + Tab 在标签页之间循环
  文件中搜索

分割窗口

按键 对应命令
⌘ + ⌥ + 2 把窗口分割成两栏
⌘ + ⌥ + 1 把窗口恢复成一栏
⌘ + ⌥ + 5 把窗口分割成网格(4组)
⌃ + [NUM] 跳转到1-4组中的某一组
⌃ + ⇧ + [NUM] 把文件移动到1-4组中的某一组

书签

按键 对应命令
⌘ + F2 开/关书签
F2 下一个书签
⇧ + F2 上一个书签
⇧ + ⌘ + F2 清空书签

文本操作

按键 对应命令
⌘ + K, ⌘ + U 将文本转换为大写
⌘ + K, ⌘ + L 将文本转换为小写

词汇表

缓冲区(buffer)
存放已经加载文件的内容以及文件元数据的区域称为缓冲区。缓冲区一般与一个或多个视图相关联。 缓冲区视图 只有一些细节上的差别。大多数情况下这两个术语是可以混用的。
视图(view)
显示缓冲区内容的图形区域。多个不同的视图可以显示同一块缓冲区内容。
插件(plugin)
使用Python实现的一个功能称为插件。它可以包含一个或多个命令。它可以由一个或多个 .py 文件组成。
包(package)
在Sublime Text中这个术语的意义有点模糊,它可以指一个Python包(这种用法很少),或者是 Packages 目录下的一个文件夹,亦或是一个 .sublime-package 文件。大多数情况下,包指的是 Packages 目录下的一个文件夹,这个文件夹中包含为某个特性或者某种语言服务的各种资源。 译者注: Packages 目录保存在Sublime Text的安装目录中
面板(panel)
像搜索或者输出这样的,用于进行输入/输出的窗体控件称为面板。
覆盖层控件(overlay)
一种特殊的输入控件。快速跳转就是一种覆盖层控件。
文件类型(file type)

在Sublime Text的上下文中,文件类型 是指由适用的 .tmLanguage 语法定义确定的文件类型。

然而,这是一个含糊不清的术语,在某些情况下,它也可以用于技术文本中更广泛的含义。