编译系统

编译系统允许你运行你的文件通过外部程序并且输出到Sublime Text中。

编译系统由两个或可选的第三部分构成:

  • JSON格式的配置数据(.sublime-build文件内容)
  • 一个Sublime Text命令驱动的编译过程
  • 可选的外部可执行文件(脚本,二进制文件)

本质上, .sublime-build文件是外部程序和刚才提到的Sublime Text命令的配置数据 。在它们中,你指定分支、选项和你想传递的环境信息。

Sublime Text命令接收的数据存储在.sublime-build文件中。在这一点上,它可以做任何它需要的来编译 文件。默认的编译系统将使用exec命令, 实现 Packages/Default/exec.py. 我们之后再解释, 你可以覆盖此命令。

最后,外部程序可能是你已经创建了一个shell脚本来处理您的文件,或一个知名的工具,如maketidy。通常,这些 可执行文件将接收的文件或目录的路径,以及要运行开关和选项。

请注意编译系统在没有任何原因的情况下不必调用任何外部程序;你可以完全用Sublime Text命令实现一个编译系统。

文件格式

.build-system 使用JSON. 下面是一个例子:

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

Options

cmd

数组,包含要执行的命令和其所需的参数。如果你不指定一个绝对路径外部程序将会去在你的PATH中搜索,一个你系统中的中的环境变量。

在Windows,图形界面是被抑制的。

file_regex
可选的。正则表达式(类Perl)来捕获错误输出在 cmd中。有关详细信息,请参阅下一节。
line_regex
可选的。如果file_regex匹配不到当前行,但是line_regex存在,且能匹配到值,那么从缓冲区从后向前搜知道有一行匹配file regex , 然后用这2个匹配结果去决定要跳至的文件和行。
selector
可选的。 当Tools | Build System | Automatictrue时使用。 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
可选的。如果是true, cmd将会在shell中运行 (cmd.exe, bash…).
path

可选的。这个字符串会在调用 cmd之前替换当前流程的PATH旧的PATH 值会在完成调用后还原。

使用这个可选项来添加目录到PATH而不用修改你系统的配置。

variants
可选的。列表的字典选项覆盖的主要构建系统的选项。变量们``name`` 将会在命令控制面板中显示和轻松访问如果编译系统匹配当前活动文件。
name
变量们中唯一有效 (见variants)。编译系统的标识。如果nameRun, 变体将出现在 Tools | Build System菜单下面并被绑定Ctrl + Shift + B.

通过file_regex捕获输出异常

file_regex选项使用类Perl的正则表达式来从编译系统输出中捕获错误信息的最多4个字段,分别是: file name, line number, column number and 和error message. 使用组模式中来捕捉这一信息。file name 字段和line number字段是必须的。

当错误信息被捕获到,你可以导航至你项目文件中错误实例出现的地方通过F4Shift+F4。如果可以的话,捕获到的 错误信息将被显示在状态栏上。

平台特定选项

windows, osxlinux元素让你在编译系统中提供平台特定数据 ,下面是个例子:

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

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

在这个例子里, ant将会被执行在每个平台里除了Windows, 那时ant.bat将会被替代使用。

Variants

下面是编译系统变量的人为例子:

{
    "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解释器并且上面出现的变量将会在命里面吧里出现命令面板当编译系统活动。

编译系统变量

编译系统识别的变量在.sublime-build文件中:

$file_path 当前文件的目录, e. g., C:Files.
$file 当前文件的全路径, e. g., C:FilesChapter1.txt.
$file_name 在当前文件的名称部分, e. g., Chapter1.txt.
$file_extension 当前文件的扩展名部分, e. g., txt.
$file_base_name 当前的文件名唯一的名字部分, e. g., Document.
$packages Packages目录的完整路径。
$project 当前项目文件的完整路径。
$project_path 当前项目文件的目录。
$project_name 当前项目文件的名称部分。
$project_extension 当前项目文件的扩展名部分。
$project_base_name 当前项目文件名唯一的名字部分。

变量占位

snippet中的功能可以使用这些变量。举个例子:

${project_name:Default}

这里将使用当前项目名如果有的话,没有则使用Default.

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

这儿将在当前文件的全路径里替换.php.txt.

运行编译系统

选择需要的编译系统通过Tools | Build System, 然后选择 Tools | Build 或按F7

故障诊断编译系统

编译系统键会在你的PATH中勋章可执行文件, 除非你指定了一个可执行文件的绝对路径。因此,你的PATH变量必须设置正确。

在一些系统中PATH的值将会在从一个终端窗口切换到图形应用时改变。因此,即使在命令行里你的编译系统命令有效,通过Sublime Text编译也许会无效。 这个取决于shell里的用户配置文件(信息?)。

为了解决问题,确定你设置了你想要的PATH 那样图形应用程序比如Sublime Text找到它。想了解更多信息看以下链接。

或者,你可以使用path元素在.sublime-build文件中来覆盖PATH用来定位cmd中指定的可执行程序。 这个PATH的新值将只会在编译系统运行时有效。在那以后旧的PATH将被还原。

你也许感兴趣

在Windows中管理环境变量
搜索该主题在Microsoft knowledge base中。
在OSX中设置环境变量
StackOverflow topic.

Project Versions

Table Of Contents

Previous topic

Syntax Definitions

Next topic

Key Bindings

This Page