build - 在 Sublime Text 构建系统中使用自定义变量

标签 build sublimetext3

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

ST Build System documentation提到了构建系统变量的可用性,但它们都不允许我解决我的主目录。

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

或者有没有办法使用 $HOME 环境变量?

我不想在构建系统中对主目录进行硬编码,因为我希望它可供不同用户使用。

最佳答案

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

特别是,您可以在 sublime-build 中包含一个 key 。文件名为 target这告诉 Sublime 它应该执行什么内部命令才能执行构建。当此键不存在时(大多数情况下),它默认为 exec内部命令,负责大部分构建过程,包括捕获并在面板中显示输出,适本地注入(inject)错误幻影等。

通过创建您自己的自定义 WindowCommand实例并包括一个 targetsublime-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/

相关文章:

javascript - Brunch:分离 vendor 和应用程序 javascript

c# - iLMerge 企业库 5.0

javascript - 将光标位置添加到 Sublime Text 3 中的代码段

docker - 编辑正在运行的Docker容器

c++ - 除非明确覆盖,否则如何创建采用默认值的 CMake 变量?

java - Play框架: package javax.注入(inject)不存在

任务 ':app:preDexDebug' 的 Android Studio 执行失败

javascript - 尝试从 Sublime Text 运行 JS 时出现 WinError 5

python - 使用 Sublime Text 3 设置 Python 3 构建系统

python - 使用python命令行在sublime text 3中删除文件