编译系统允许你运行你的文件通过外部程序并且输出到Sublime Text中。
编译系统由两个或可选的第三部分构成:
本质上, .sublime-build文件是外部程序和刚才提到的Sublime Text命令的配置数据 。在它们中,你指定分支、选项和你想传递的环境信息。
Sublime Text命令接收的数据存储在.sublime-build文件中。在这一点上,它可以做任何它需要的来编译 文件。默认的编译系统将使用exec命令, 实现 Packages/Default/exec.py. 我们之后再解释, 你可以覆盖此命令。
最后,外部程序可能是你已经创建了一个shell脚本来处理您的文件,或一个知名的工具,如make或tidy。通常,这些 可执行文件将接收的文件或目录的路径,以及要运行开关和选项。
请注意编译系统在没有任何原因的情况下不必调用任何外部程序;你可以完全用Sublime Text命令实现一个编译系统。
.build-system 使用JSON. 下面是一个例子:
{
"cmd": ["python", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
数组,包含要执行的命令和其所需的参数。如果你不指定一个绝对路径外部程序将会去在你的PATH中搜索,一个你系统中的中的环境变量。
在Windows,图形界面是被抑制的。
可选的。 要运行的Sublime Text命令。 默认是exec (Packages/Default/exec.py). 这个命令接收在.build-system 文件中指定的配置数据。
用于覆盖默认的编译系统命令。请注意,如果您选择覆盖编译系统的默认的命令,你可以添加任意的变量到.sublime-build文件中。
可选的。环境变量中的目录与当前流程中的合并在传递它们到cmd。
使用此元素,举个例子,来增加或修改换环境变量而不用修改你系统里的配置。
可选的。这个字符串会在调用 cmd之前替换当前流程的PATH。旧的PATH 值会在完成调用后还原。
使用这个可选项来添加目录到PATH而不用修改你系统的配置。
file_regex选项使用类Perl的正则表达式来从编译系统输出中捕获错误信息的最多4个字段,分别是: file name, line number, column number and 和error message. 使用组模式中来捕捉这一信息。file name 字段和line number字段是必须的。
当错误信息被捕获到,你可以导航至你项目文件中错误实例出现的地方通过F4和Shift+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.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解释器并且上面出现的变量将会在命里面吧里出现命令面板当编译系统活动。
编译系统识别的变量在.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将被还原。
你也许感兴趣