Sublime Text 构建系统 - 学习整理

2023-11-09

Sublime Text 提供构建系统(Build Systems),构建系统可以调用外部程序来处理文件。也就是说,它可以调用一些脚本,或是编译器、解释器等。因此,构建系统的一个的常用示例就是编译。在本文,我们将重点放在构建系统本身上,构建系统的一些使用示例将在其他的文章中详细介绍。

注意,本文章默认在 Windows 系统下使用 Sublime Text,在 Mac 和 Linux 下的情况也类似,因此本文不加讨论。当前的 Sublime Text 版本为 Sublime Text 4(及以上)。

什么是构建系统

我们在广义上使用“构建”这个词,它不是指编译。一个构建系统不一定就要生成一个已编译的可执行文件——它可以简单地格式化代码,运行一个解释器,等等。实际上,构建系统所做的主要就是调用一个外部程序。

构建系统是一个 JSON 文件,扩展名为 .sublime-build。可以通过 Tools | Build System | New Build System... 来创建一个新的构建系统。自定义的 .sublime-build 文件需要放在用户目录的 AppData\Roaming\Sublime Text\Packages 或其子目录下。

简单的构建系统只需要一个 .sublime-build 文件。

更高级的构建系统可能由以下三部分组成:

  • 一个 .sublime-build 文件(JSON 格式的配置数据);
  • 可选的,一个自定义的驱动构建过程的 Sublime Text 命令(Python 代码);
  • 可选的,外部可执行文件(脚本或二进制文件)。

本文只介绍 .sublime-build 文件的内容,不涉及额外编写 Python 代码与外部可执行文件。

构建系统的使用

运行构建系统

构建系统可以通过以下方法之一运行:

  • 通过快捷键 Ctrl+B
  • 通过快捷键 F7
  • 通过菜单 Tools | Build

选择构建系统

默认情况下,Sublime Text 使用自动选择构建系统。当用户调用构建系统时,将使用当前文件的语法和文件名来选择适当的构建系统。如果有多个构建系统与当前文件类型匹配,则会提示用户选择他们希望使用的构建系统。一旦选择了构建系统,Sublime Text 会记住它,直到用户改变他们的选择。

要改变构建系统,可使用快捷键 Ctrl+Shift+B 或菜单 Tools | Build With

结果导航

当构建系统向结果视图(下方的输出窗口)输出文本时,可以捕获结果数据以启用结果导航。结果也通常意味着报错信息。结果导航通常用于跳转到错误的位置。导航可以通过以下方式进行:

  • 下一个结果:快捷键 F4 或菜单 Tools | Build Results | Next Result
  • 下一个结果:快捷键 Shift+F4 或菜单 Tools | Build Results | Previous Result

取消构建

一个正在进行的构建可以i通过快捷键 Ctrl+Break 或菜单 Tools | Cancel Build 来取消。

自定义构建

我们可以在 Sublime Text 安装目录的 Packages 文件夹(不是在用户目录下的 Packages 文件夹)下看到很多 .sublime-package 文件,这些是 Sublime Text 的包文件,其中每个包可视为 Zip 压缩包。我们将其中一个复制出来重命名为 .zip 后缀之后,可以看到里面有很多文件,其中就大概率有 .sublime-build 这个文件。一般而言,包名就是某个语法的名字,而其中的 .sublime-build 一般就是针对这个语法而设计的构建系统。

例如,我们把 Python.sublime-package 这个文件复制出来,重命名为 Python.zip。打开压缩包,我们可以看到其中的 .sublime-build 文件,文件内容如下:

Python.sublime-package

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

	"env": {"PYTHONIOENCODING": "utf-8"},

	"windows": {
		"cmd": ["py", "-u", "$file"],
	},

	"variants":
	[
		{
			"name": "Syntax Check",
			"cmd": ["python3", "-m", "py_compile", "$file"],

			"windows": {
				"cmd": ["py", "-m", "py_compile", "$file"],
			}
		}
	]
}

如果我们暂时忽略 Syntax Check 的变体,该构建系统能实现的就是:当运行构建时,调用 Python 解释器来执行当前的 Python 文件。输出结果在编辑器内部下方的输出窗口里。

然而,如果程序需要读取键盘输入,而输出窗口上是无法将输入送给程序的,这就导致不能输入。因此,我们可以看到 Sublime Text 自身带有的 .sublime-build 文件未必就能满足我们的需求。我们很可能都需要自定义构建系统。

接下来,我们就来解释构建系统的运行过程以及 .sublime-build 文件中的每个选项都是什么意思。

构建系统的运行过程

当在 Sublime Text 中运行默认的构建任务时,Sublime Text 命令(默认为 exec,但它可以被覆盖成其他的)首先会接收到 .sublime-build 文件中指定的配置数据(也就是某些选项),然后开始构建文件。通常,它调用一个外部程序。

如上所说,默认情况下,构建系统使用由 Packages/Default/exec.py 实现的 exec 命令。该命令只是将配置数据转发到外部程序并异步运行。使用 .sublime-build 文件中的 target 选项,可以覆盖 exec 命令,将命令指定为 target 选项的值。

选项

所有构建系统都可以在 .sublime-build 文件中使用以下选项:

  • "selector"string
    一个选择器,用于匹配应该启用此构建系统的语法。当 Tools | Build System | Automatic 设置为 true 时使用。Sublime Text 使用这个选择器为活动视图找到合适的构建系统。
  • "file_patterns"array of strings
    表示应该启用构建系统的文件名模式。
  • "keyfiles"array of strings
    文件名,如果存在于其中一个打开的文件夹中,将导致启用构建系统。
  • "variants"array of objects
    从顶层构建系统继承选项的附属构建系统,是选项的字典列表。每个 "variant" 都需要指定一个 "name" 键,并且可以覆盖或向顶层构建系统添加选项。使用 "variants" 可以在同一个 .sublime-build 文件中指定多个构建系统任务。
  • "cancel"stringarray of strings
    字符串命令名或字符串选项数组。如果指定了字符串,则将使用指定的命令取消构建;如果是字符串选项数组,则 "target" 将被调用,并且这些选项将被添加进去。这只需要在使用自定义 "target" 时指定。
  • "target"string
    调用构建系统时要运行的命令。默认为 exec。这个命令接收 .sublime-build 文件中指定的所有目标命令参数。请注意,如果你选择覆盖构建系统的默认命令,你可以向 .sublime-build 文件添加任意数量的额外选项。exec 的默认值允许使用 “exec 目标选项”(下一部分)中指定的附加选项。如果指定了 exec 以外的值,则 “exec 目标选项” 中的任何选项都不会执行任何操作。
  • "windows"object
    在 Windows 机器上执行构建系统时使用的选项,接受一个包含选项的字典。用于操作系统有选择地应用选项。特定于操作系统的值会覆盖默认值。
  • "osx"object
    在 Mac 机器上执行构建系统时使用的选项,接受一个包含选项的字典。用于操作系统有选择地应用选项。特定于操作系统的值会覆盖默认值。
  • "linux"object
    在 Linux 机器上执行构建系统时使用的选项,接受一个包含选项的字典。用于操作系统有选择地应用选项。特定于操作系统的值会覆盖默认值。

以上这些是所有构建系统都能理解的标准选项列表。这些选项在 Sublime Text 内部使用,target 指定的命令不接收这些选项中的任何一个。

exec 目标选项

大多数构建系统都使用默认 target(即 exec)。它提供了以下选项来控制要执行什么程序,以及如何显示结果。下面的所有选项都与 exec 命令相关,如果更改了 target,则不再依赖这些选项。

  • "cmd"array of strings
    如果 "shell_cmd" 为空则需要。会被 "shell_cmd" 覆盖。包含要运行的可执行文件及其所需参数的数组。如果不指定绝对路径,则将在 PATH 中搜索外部程序。不支持管道和重定向等 shell 构造。可以使用变量。
  • "shell_cmd"string
    如果 "cmd" 为空则需要。如果存在 "cmd" 则会将其覆盖。为要执行的 shell 命令。不像 "cmd" 选项,它允许管道和重定向。可以使用变量。在 Mac 和 Linux 机器上使用 bash,在 Windows 上使用 cmd.exe
  • "working_dir"string
    执行 "cmd""shell_cmd" 的目录。可以使用变量。也就是说在执行 "cmd""shell_cmd" 前,会先从当前目录改变到 "working_dir",然后执行 "cmd""shell_cmd" ,之后再返回原目录。
  • "file_regex"string
    一个 perl 风格的正则表达式,用于从结果视图中捕获最多四个错误信息字段,即:文件名、行号、列号和错误消息。使用组来捕获此信息,文件名字段和行号字段是必需的,也就是说,该正则表达式应该捕获2、3或4个组。
  • "line_regex"string
    一个 perl 风格的正则表达式,用于从结果视图中捕获最多三个错误信息字段,即:行号、列号和错误消息。使用组来捕获此信息,行号字段是必需的,也就是说,该正则表达式应该捕获1、2或3个组。这个正则表达式只在某些结果严格包含行号,或行号和列号,或带有消息的行号和列号时才需要。当进行这样的匹配时,如果 "file_regex" 不匹配,但 "line_regex" 存在并且匹配当前行,则向后遍历缓冲区,直到找到匹配 "file_regex" 的行,并使用这两个匹配来确定要访问的文件和行。
  • "encoding"string
    构建系统输出的编码。使用 Python 编解码器名称(见 https://docs.python.org/3.3/library/codecs.html#id3)。默认为“utf-8”。
  • "env"object
    运行 "cmd""shell_cmd" 时要使用的环境变量值。使用此选项可以在不修改系统设置的情况下添加或修改环境变量。
  • "quiet"boolean
    减少关于构建系统调用的输出量。
  • "word\_wrap"boolean
    在构建系统输出面板中打开换行。
  • "syntax"string
    用于突出显示构建系统输出面板的语法文件。

自定义目标选项

当实现一个命令作为构建系统的 target 时,该命令的关键字参数可以通过 .sublime-build 文件中的选项使用。但是,某些参数名不可行,因为它们与内置的构建系统功能冲突。以下名称将不会作为参数传递给命令(这也适用于其他情况,例如在 "cancel""windows""osx""linux" 选项中指定的选项):"cancel""file_patterns""keyfile""keyfiles""windows""osx""linux""save_untitled_files""selector""target""variants"

变量

下面的变量将在 "cmd""shell_cmd""working_dir" 选项中指定的任意字符串中展开。

如果字面量 $ 需要在这些选项中指定,那么它必须用 \ 转义。又因为 JSON 也使用反斜杠来转义,因此 $ 将需要写成 \\$。变量的 $ 后面的内容可以用 {} 来包裹。

变量 描述
$packages 文件夹的路径。
$platform Sublime Text 运行的平台:"windows""osx""linux"
$file 活动视图中文件的完整路径(包括文件夹)。
$file_path 活动视图中文件所在文件夹的路径。
$file_name 活动视图中文件的文件名(无文件夹路径)。
$file_base_name 活动视图中文件的文件名(不包括扩展名)。
$file_extension 活动视图中文件的文件名的扩展名。
$folder 在侧栏中打开的第一个文件夹的完整路径。
$project 当前项目文件的完整路径。
$project_path 当前项目文件所在文件夹的路径。
$project_name 当前项目文件的文件名(无文件夹路径)。
$project_base_name 当前项目文件的文件名(不包括扩展名)。
$project_extension 当前项目文件的扩展名。

详细实例请参看下述文章:

Sublime Text 配置 C/C++ 编译环境与中文乱码的解决

Sublime Text 配置 Python 环境

参考文档:

  1. https://www.sublimetext.com/docs/build_systems.html
  2. https://docs.sublimetext.io/guide/usage/build-systems.html
  3. https://sublime-text-unofficial-documentation.readthedocs.io/en/latest/reference/build_systems.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sublime Text 构建系统 - 学习整理 的相关文章

  • CTRL键不能使用(非硬件问题)

    如果ctrl键不能用了 并且排除是硬件问题 排除方法 电脑有两个CTRL键 可以试试另一个是否可以使用 那么肯定是驱动除了问题 相关链接 根据上面的教程修改之后 我的驱动是无法更新的 我换了一个驱动就能正常使用了 选择驱动程序详细信息 然后
  • 【编译原理】实验二:NFA到DFA

    目录 实验二 NFA 到 DFA 一 实验目的 二 预备知识 三 实验内容 NFA向DFA的转换的思路 lt
  • unity实现简单的地图编辑器,实现跑酷地图编辑器 2d地图编辑器,导出地图json数据,导入地图json数据

    这里使用的是unity2020 1 对于unity编辑器开发也不是很了解 这方面的教程也不多 也是慢慢摸索的 效果显示 首先简单 介绍下Unity编辑器开发 1 Editor下打开新窗口需要继承EditorWindow 然后使用获取窗口即可
  • 猿如意

    目录 一 什么是猿如意 二 借助猿如意安装Visual Studio Code 1 安装猿如意 2 安装Visual Studio Code 三 总结 一 什么是猿如意 猿如意是CSDN推出来的一款面向开发者的工具 他能够帮助开发者 找到自
  • 使用editor.md渲染markdown并自定义目录

    使用editor md渲染markdown并自定义目录 一 需求 最近在开发个人博客 在做文章详情页的时候 需要将markdown格式的文本字符串渲染成html页面 于是逛github的时候发现了这一款markdown在线编辑器 它支持将m
  • 计算机系统基础、LinkLab实验每个实验阶段(共5个)考察ELF文件组成与程序链接过程的不同方面知识 阶段1:全局变量ó数据节 阶段2:强符号与弱符号ó数据节 阶段3:代码节修改 阶段4:代码与重定

    LinkLab实验 1 实验目的与要求 1 了解链接的基本概念和链接过程所要完成的任务 2 理解ELF目标代码和目标代码文件的基本概念和基本构成 3 了解ELF可重定位目标文件和可执行目标文件的差别 4 理解符号表中包含的全局符号 外部符号
  • Markdown 技能树(8):代码块

    Markdown 技能树 8 代码块 行内代码的格式很简单 只需要使用两个 将代码内容包裹起来即可 比如 var foo bar 缩进显示代码 要在 Markdown 中创建代码块也很简单 只要简单地缩排 4 个空白或是 1 个 tab 就
  • obsidian上手使用

    前言 我之前一直使用的是typora typora付费后就没有使用过了 后面就一直找markdown编辑器 在一次网课中我发现了老师用的网页富文本编辑器非常不错 这样我认识了语雀 语雀的文本编辑体验确实非常的不错 还可以在笔记里添加思维导图
  • C++ STL概述

    STL就是封装好的一些数据结构以及一些算法 C STL 标准模板库 是一套功能强大的 C 模板类 提供了通用的模板类和函数 这些模板类和函数可以实现多种流行和常用的算法和数据结构 如向量 链表 队列 栈 Standard Template
  • Vim中多行删除

    在操作虚拟机的时候 都会出错 当在vim中出现问题的时候 可以在dw普通模式下删除对应的单词 如果在vim中使用多行删除 可以使用dd vim 命令 将行数添加到该命令中 如10dd将从光标底部删除10行 包含光标行在内 删除单行 1 按
  • 用Sublime写html,如何配置代码自动补全功能

    Sublime安装完成后 language设置中文 步骤一 下载汉化包 就是下图这个点击下载 步骤二 打开Sublime界面 点击菜单栏 gt preferences gt Browse Packages 点击后打开了一个文件夹 返回上一层
  • Sublime中自动代码提示插件Anaconda插件下载及设置

    Sublime中自动代码提示插件Anaconda插件下载及设置 一 代码提示功能插件 Anaconda 通过package Control 进行插件下载 按住ctr shift p会弹出对话框 没果没有的话 需要进行package Cont
  • vscode远程连接失败解决方案

    vscode远程连接在更新了配置文件或者密钥信息更新后可能会出现远程连接失败 过程试图写入的管道不存在 该问题的主要有以下三种解决方案 1 在vscode SSH扩展设置中配置config文件的绝对位置 该文件一般位于 ssh文件夹中 C
  • Markdown基础语法介绍

    何为Markdown Markdown是一种轻量级标记语言 它允许用户以纯文本格式编写文档 然后转换成有效的XHTML或HTML文档 Markdown具备轻量化 跨平台 易读易写等特性 且支持文本 图片 图表等多种展示样式 Markdown
  • 2023-02-21 好用的一款十六进制编辑器软件Hex Editor Neo ,以十六进制字节形式查看文件有字节

    一 Hex Editor Neo是一款十六进制编辑器软件 可以在几秒钟内处理大文件的操作 能够帮助用户编辑ASCII 十六进制 十进制 float double和二进制数据的应用程序 感觉比notepad的hex查看功能更强大 用notep
  • Source Insight4.0的安装以及配置

    安装source insight4 工具的动机 1 公司需求 2 source insight4 0工具是集开发快速以及界面美观和方便等多种优点于一个软件的编辑器 1 需要准备资料 source insight4 0的安装包 以及安装的过程
  • vscode乱码

    vscode中文乱码怎么解决 vscode是一款跨平台源代码编辑器 能够在桌面上运行 并且能够用途windows macOS以及Linux 但是有不少小伙伴们在使用vscode时 输入输出的却是中文代码 也不知道如何解决 那么今天小编就来告
  • vscode配置clangd和clang-format

    vscode安装和配置 如何安装和配置vscode以搭建c 开发环境 可以查看我的另一篇博客 Windows上最轻量的vscode C 开发环境搭建 在这篇博客中 详细介绍了如何安装vscode以及应该安装哪些插件 这里不再赘述 vscod
  • Latex符号表——文本/数学模式通用符号

    目录 简介 速览图 详细列表 简介 这篇博客用来记录文本 数学模式通用符号 这些符号可用于文本和数学模式 速览图 详细列表 符号 命令
  • 钱越来越难挣?这期程序员兼职干货没有水分!

    钱越来越难挣 程序员找兼职越来越难 结局只能指路美团 文末福利 还没看透职场 高薪 骗局 别人早就把精力放在了做副业上 兼职找不到 多半是经验不够 思路没打开 本篇文章 应该能让你茅塞顿开 收获颇丰 先喝点水 干货满满 下面容我娓娓道来 一

随机推荐

  • c++中的list容器讲解

    文章目录 1 list的介绍及使用 1 1 list的介绍 1 2 list的使用 1 2 1 list的构造 1 2 2 list iterator的使用 1 2 3 list capacity 1 2 4 list element ac
  • vscode python3安装 xlwt_python EXCEL自动化办公(一)xlrd、xlwt、xlsxwriter安装过程

    目前在python中实现EXCEL办公自动化过程中 经常用到两个包 xlrd和xlwt 在某些博主或者资料中指出xlwt有bug 目前不清楚是否被修复 我们这里保险起见 再安装另一个包xlsxwriter 其中xlrd作为excel读取 x
  • IDEA访问不了官网?看过来!(超详!超细!)

    IDEA访问不了官网 显示 无法访问此网址 超详细 导语 IDEA访问不了 话不多说 实战为主 作者 变优秀的小白 Github YX XiaoBai 爱好 Americano More Ice QQ交流群 new 811792998 注
  • 算法学习 day23

    669 修剪二叉搜索树 给你二叉搜索树的根节点 root 同时给定最小边界low 和最大边界 high 通过修剪二叉搜索树 使得所有节点的值在 low high 中 修剪树 不应该 改变保留在树中的元素的相对结构 即 如果没有被移除 原有的
  • 什么是包?导包的机制

    目录 小白眼中的包 Java包的定义 小白眼中的包 书包 钱包 水桶包都是包 根据盛放东西的区别而划分了不同的种类 盛书的叫书包 盛钱的叫钱包 盛日常出行必备品的桶装包叫水桶包 由此推导 包是盛纳物品的容器 Java包的定义 Java包指的
  • idea中配置连接多个数据库

    要在一个项目中连接如下两个数据库 yml中配置两个不同数据库 master datasource username root password url jdbc mysql localhost 3306 study useUnicode t
  • 基于OpenCV的视频道路车道检测

    基于OpenCV的视频道路车道检测 前言 综述 运行方法 车道检测的实现 路面图像二值化 基于透视变换提取车道区域 基于二次多项式拟合车道线 基于二次多项式拟合车道线 计算曲率半径与车辆的偏移距离 用车道区域标注原始图像 总结 前言 本篇博
  • [CVPR-17] Focal Loss for Dense Object Detection

    目录 摘要 Introduction Focal Loss Focal Loss Definition RetinaNet FPN Anchors 推理 Focal Loss 摘要 在训练密集detectors时 前景 背景极度不平衡是on
  • STL源码剖析(五)——关联式容器

    1 概览 所谓关联式容器 观念上类似于关联式数据库 每笔数据都有一个键值 key 和实值 value 当元素被插入到关联式容器中 容器内部结构 可能是红黑树和哈希表 便依照键值大小 以某种特定规则将这个元素放置在适当位置 关联式容器没有所谓
  • WEB开发技术期末复习

    The content comes from teacher courseware 第一章 信息系统与java企业级规范 一 信息系统的类型 1 单机系统 单机系统的特点 数据显示 数据处理 数据存储在同一台计算机上进行 数据显示一般为图形
  • Illegal mix of collations ((latin1_swedish_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for报错

    Illegal mix of collations latin1 swedish ci IMPLICIT and gbk chinese ci COERCIBLE for operation 查看了数据库发现是建表时设置表的编码为latin
  • Git的Flow工作流分享

    最近我们团队对日常开发规范和版本控制等工作进行了调整 为此对GitFlow工作流以及它的各类变种也进行了学习 在此记录一下 只有一个Master分支带来的问题 首先我们回顾一下我们在日常与团队的合作开发一个项目中会遇到与版本控制相关的场景
  • 一些测试案例

    一些测试案例 微信发红包测试用例 功能 可移植性 性能 界面 安全性 易用性 水杯的测试用例 功能 界面 性能 安全性 兼容性 易用性 可移植性 抗震性 电梯的测试用例 功能测试 界面测试 易用性测试 安全性测试 性能测试 兼容性测试 淘宝
  • 【机器学习与深度学习理论要点】25.什么是归一化,为什么要进行归一化?

    1 归一化是指归纳同意样本的统计分布性 归一化在0 1之间是统计概率分布 归一化在 1 1之间是统计的坐标分布 2 归一化处理的目的 为了后面数据处理方便 归一化可以避免一些不必要的数值问题 为了程序运行时收敛加快 统一量纲 样本数据的评价
  • STM32+L298N+PWM可调速小车(四驱)

    完整工程代码已放到百度网盘 链接如下 链接 https pan baidu com s 16zcnfLt2iYlrDdN N6tKbA 提取码 dn54 一 L298N电机驱动板 电源引脚 VCC 外接直流电源引脚 电压范围在5 35V之间
  • import torchvision时提示ImportError: DLL load failed: 找不到指定的模块。

    ImportError DLL load failed 找不到指定的模块 本人使用的是windows anaconda4 6 11 安装torchvision 时使用的是pip install no deps torchvision pip
  • 卷积神经网络(convolutional neural network, CNN)

    卷积神经网络 convolutional neural network CNN 卷积神经网络 convolutional neural network CNN 是一种专门用来处理具有类似网格结构的数据的神经网络 卷积网络是指那些至少在网络的
  • 游戏计算机推荐,2020十大游戏笔记本电脑排名(最新游戏本推荐)

    2020十大游戏笔记本电脑排名 最新游戏本推荐 1 玩家国度冰刃3S 9代i7 RTX2070 240Hz超高刷新率电竞屏 2 外星人Alienware M15 银 红双色可选 144Hz 1080P电竞屏 3 联想Y7000P 2019
  • 真题详解(语法分析输入记号流)-软件设计(八十)

    真题详解 求叶子结点数 软件设计 七十九 https blog csdn net ke1ying article details 130787349 spm 1001 2014 3001 5501 极限编程XP最佳实践 测试先行 按日甚至按
  • Sublime Text 构建系统 - 学习整理

    Sublime Text 提供构建系统 Build Systems 构建系统可以调用外部程序来处理文件 也就是说 它可以调用一些脚本 或是编译器 解释器等 因此 构建系统的一个的常用示例就是编译 在本文 我们将重点放在构建系统本身上 构建系