我正在 macOS 上配置 Sublime Text (ST) 构建系统。
我想创建一个构建系统变体,将构建产品输出到我的用户库中的文件夹,但我找不到解决此目录的方法。
ST Build System documentation提到了构建系统变量的可用性,但它们都不允许我解决我的主目录。
有没有办法在 ST 构建系统中使用自定义变量,以便我可以以某种方式推断主目录路径?
或者有没有办法使用 $HOME 环境变量?
我不想在构建系统中对主目录进行硬编码,因为我希望它可供不同用户使用。
最佳答案
确实可以在构建中引入自定义变量,但这是一项有点复杂的任务,因为您必须编写一个 Sublime 插件来完成这项工作。
特别是,您可以在 sublime-build
中包含一个 key 。文件名为 target
这告诉 Sublime 它应该执行什么内部命令才能执行构建。当此键不存在时(大多数情况下),它默认为 exec
内部命令,负责大部分构建过程,包括捕获并在面板中显示输出,适本地注入(inject)错误幻影等。
通过创建您自己的自定义 WindowCommand
实例并包括一个 target
在 sublime-build
文件,Sublime 将执行你的命令而不是默认的,这允许你按照你认为合适的方式解释变量。
这种构建系统的一个例子是 available here如果你想走这条路。简而言之,它是一个自定义命令,可将变量展开然后调用内部 exec
命令实际完成工作。
综上所述,如果您愿意,您可以直接在命令中使用环境变量,因此如果您的目标是在已知位置创建一个基于环境变量的文件夹,您可以完全不做任何更改。
这里的问题是,在 MacOS 和 Linux 上,$
shell 使用字符来表示变量,但 Sublime 使用 $
也表示它自己的变量。因此,您需要执行一些“引用魔术”才能使事情发挥作用。
如果您尝试使用例如 $HOME
要扩展到主目录,它将扩展为一个空字符串。这是因为当 Sublime 准备执行构建时,它会扩展所有变量;其值未知的变量将替换为空字符串。这不是受支持的构建变量,因此它被认为是空的。
解决方案是“引用”美元符号; \$
告诉 Sublime 不要特别对待它;允许它通过 $
通过到最终运行 shell 的命令。
但是,如果您尝试这样做,则会在状态行中看到可怕的“No Build System”错误,并且什么也没有发生。造成这种情况的原因是 sublime-build
文件是 JSON,在 JSON 中 \$
是无效的转义序列;因此构建无法加载并且 Sublime 什么也不做。
解决方法是使用 \\$
;被 JSON 加载器解释为带引号的斜杠,它在内部转换为 \$
,这使得 Sublime 将其转换为 $
并将其传递给命令。
一个例子是以下简单的构建系统,它在构建面板中显示您的主目录:
{
"shell_cmd": "echo \\$HOME/",
}
关于build - 在 Sublime Text 构建系统中使用自定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54187463/