确实可以在构建中引入自定义变量,但这是一项有点复杂的任务,因为您必须编写一个 Sublime 插件来完成这项工作。
特别是,您可以在您的 sublime-build 文件中包含一个名为 target 的密钥,它告诉 Sublime 它应该执行什么内部命令才能执行构建。当此键不存在时(大多数情况下),它默认为exec 内部命令,该命令负责大部分构建过程,包括捕获并在面板中显示输出,酌情注入错误幻象,等等。
通过创建您自己的自定义WindowCommand 实例并在sublime-build 文件中包含target,Sublime 将执行您的命令而不是默认命令,这允许您按照您认为合适的方式解释变量。
如果您想走这条路,available here 就是一个这样的构建系统示例。简而言之,它是一个自定义命令,将变量展开,然后调用内部exec 命令来实际完成这项工作。
综上所述,如果需要,您可以直接在命令中使用环境变量,因此,如果您的目标是在已知位置创建一个基于环境变量的文件夹,则无需更改即可完全没有。
这里要注意的是,在 MacOS 和 Linux 上,$ 字符被 shell 用来表示变量,但 Sublime 也使用 $ 来表示它自己的变量。因此,您需要执行一些“引用魔法”才能让事情发挥作用。
如果您尝试使用例如$HOME 来展开到主目录,它将展开为一个空字符串。这是因为当 Sublime 准备执行构建时,它会扩展所有变量;它不知道其值的变量被替换为空字符串。这不是一个受支持的构建变量,所以它被认为是空的。
然后解决方案是“引用”美元符号; \$ 告诉 Sublime 不要特殊对待;这允许它将$ 传递给最终运行shell 的命令。
但是,如果您尝试,您会在状态行中看到可怕的“无构建系统”错误,并且什么也没有发生。原因是sublime-build文件是JSON,而在JSON中\$是无效的转义序列;因此构建无法加载,Sublime 什么也不做。
解决方案是使用\\$; JSON 加载器将其解释为带引号的斜杠,它在内部转换为 \$,这使得 Sublime 将其转换为 $ 并将其传递给命令。
下面的简单构建系统就是一个例子,它在构建面板中显示您的主目录:
{
"shell_cmd": "echo \\$HOME/",
}