我正在macOS上配置Sublime Text(ST)构建系统。 我想创建一个构建系统变体,将构建产品输出到我的用户库中的文件夹,但是找不到找到该目录的方法。
ST Build System documentation提到了构建系统变量的可用性,但没有一个允许我寻址主目录。
是否可以在ST构建系统中使用自定义变量,以便以某种方式推断主目录路径?
还是可以使用$ HOME环境变量?
我不想在构建系统中对主目录进行硬编码,因为我希望它可由其他用户使用。
答案 0 :(得分:0)
确实可以在构建中引入自定义变量,但这是一个相当复杂的任务,因为您必须编写Sublime插件才能完成这项工作。
尤其是,您可以在名为sublime-build
的{{1}}文件中包含一个密钥,该密钥告诉Sublime应该执行什么内部命令以执行构建。当此键不存在时(通常是大多数时间),它默认为target
内部命令,该命令负责大多数构建过程,包括在面板中捕获和显示输出,注入错误幻像。视情况而定,等等。
通过创建您自己的自定义exec
实例并在WindowCommand
文件中包含target
,Sublime将执行您的命令而不是默认命令,从而使您可以按自己的意愿解释变量适合。
如果您想走这条路,可以使用available here这样的构建系统。简而言之,它是一个自定义命令,该命令将变量扩展出来,然后调用内部sublime-build
命令来实际完成该工作。
话虽如此,您可以根据需要直接在命令中使用环境变量,因此,如果您的目标是在已知位置基于环境变量创建一个文件夹,则无需做任何更改完全没有。
这里要注意的是,在MacOS和Linux上,外壳程序使用exec
字符表示变量,但Sublime也使用$
表示其自己的变量。因此,您需要执行一些“引用魔术”操作才能使工作正常进行。
如果尝试使用$
扩展到主目录,它将扩展为空字符串。这是因为,当Sublime准备执行构建时,它会扩展所有变量。不知道其值的变量将替换为空字符串。这不是受支持的构建变量,因此被视为空。
然后的解决方案是“引用”美元符号; $HOME
告诉Sublime不要特别对待它;允许它将\$
传递给最终运行shell的命令。
但是,如果您尝试那个,则会在状态行中出现可怕的“没有构建系统”错误,并且什么也没有发生。原因是$
文件是JSON,而在JSON sublime-build
中则是无效的转义序列。因此构建无法加载,Sublime什么也不做。
解决方案是使用\$
; JSON加载程序将其解释为带引号的斜杠,该斜杠在内部转换为\\$
,这使Sublime将其转换为\$
并将其传递给命令。
以下是一个简单的构建系统的示例,该系统在构建面板中显示您的主目录:
$