【问题标题】:Use custom variables in Sublime Text build system在 Sublime Text 构建系统中使用自定义变量
【发布时间】:2019-01-14 18:51:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: build sublimetext3


    【解决方案1】:

    确实可以在构建中引入自定义变量,但这是一项有点复杂的任务,因为您必须编写一个 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/",
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2014-12-17
      • 2012-08-05
      • 2015-11-27
      • 2020-10-07
      • 1970-01-01
      相关资源
      最近更新 更多