Build 在Sublime文本生成系统中使用自定义变量

Build 在Sublime文本生成系统中使用自定义变量,build,sublimetext3,Build,Sublimetext3,我正在macOS上配置Sublime Text(ST)构建系统。 我想创建一个构建系统变体,将构建产品输出到我的用户库中的一个文件夹中,但是我找不到一种方法来处理这个目录 其中提到了构建系统变量的可用性,但它们都不允许我处理我的主目录 有没有一种方法可以在ST构建系统中使用自定义变量,以便以某种方式推断主目录路径 或者有没有一种方法可以使用$HOME环境变量 我不想在构建系统中硬编码主目录,因为我希望它能被不同的用户使用。在构建中引入自定义变量确实是可能的,但这是一项有点复杂的任务,因为您必须编

我正在macOS上配置Sublime Text(ST)构建系统。 我想创建一个构建系统变体,将构建产品输出到我的用户库中的一个文件夹中,但是我找不到一种方法来处理这个目录

其中提到了构建系统变量的可用性,但它们都不允许我处理我的主目录

有没有一种方法可以在ST构建系统中使用自定义变量,以便以某种方式推断主目录路径

或者有没有一种方法可以使用$HOME环境变量


我不想在构建系统中硬编码主目录,因为我希望它能被不同的用户使用。

在构建中引入自定义变量确实是可能的,但这是一项有点复杂的任务,因为您必须编写一个崇高的插件来完成这项工作

特别是,您可以在名为
target
sublime build
文件中包含一个键,它告诉sublime应该执行什么内部命令来执行构建。当该键不存在时(大多数情况下),它默认为
exec
内部命令,该命令负责大部分构建过程,包括捕获并在面板中显示输出,根据需要注入错误模型,等等

通过创建自己的自定义
WindowCommand
实例,并在
sublime build
文件中包含一个
target
,sublime将执行您的命令,而不是默认命令,该命令允许您根据需要解释变量

这种构建系统的一个例子是,如果您愿意走这条路线。简言之,这是一个自定义命令,它将变量展开,然后调用内部
exec
命令来实际执行任务

说到这里,如果您愿意,您可以直接在命令中使用环境变量,因此,如果您的目标是在已知位置创建一个基于环境变量的文件夹,那么您可以在不做任何更改的情况下完成

这里需要注意的是,在MacOS和Linux上,shell使用
$
字符来表示变量,而Sublime也使用
$
来表示它自己的变量。因此,您需要执行一些“引用魔法”来让事情正常运行

如果尝试使用例如
$HOME
展开到主目录,它将展开为空字符串。这是因为当Sublime准备执行构建时,它会扩展所有变量;它不知道其值的变量将替换为空字符串。这不是受支持的生成变量,因此它被视为空

然后,解决办法是“引用”美元符号<代码>\$告诉升华不要特别对待它;这允许它将
$
传递给最终运行shell的命令

但是,如果您尝试这样做,就会在状态行中出现可怕的“无构建系统”错误,并且什么也不会发生。原因是
sublime build
文件是JSON,在JSON
\$
中是无效的转义序列;因此,构建无法加载,升华什么也不做

解决方案是使用
\\$
;JSON加载程序将其解释为带引号的斜杠,它在内部转换为
\$
,这使得Sublime将其转换为
$
,并将其传递给命令

以下简单生成系统就是一个例子,它在“生成”面板中显示您的主目录:

{
“shell_cmd”:“echo\\\$HOME/”,
}