我想为我的应用创建一个构建系统,它将打开目标文件的URL。例如,如果我在项目文件components/flower.html
上运行构建,则它应该运行
open http://localhost:8080/app/components/flower.html
ST的变量列表没有相对路径。所以我最接近的是
http://localhost:8080/app//dev/myproject/components/flower.html
它包含完整路径。也许有一种简单的方法可以删除/dev/myproject
部分?
这是我想进一步自定义的构建设置:
"cmd": ["open", "http://localhost:8080/app/${file_path}"]
答案 0 :(得分:0)
If we look at the documentation on Build Systems, we see that we can use snippet substitution in the variables used in the build system.当内置变量不能满足我们的需求时,这非常方便。
因此,我们可以用任何东西替换项目目录以获得相对路径。
我发现测试替换的最简单方法是使用$SELECTION
的代码段,这样您就可以更改所选文本并尝试不同的测试用例,而无需担心使用不同的名称保存文件或运行构建系统并等待结果。
替换是使用正则表达式完成的,其中正斜杠需要转义,因为它们具有特殊含义。变量名后面的一个斜杠,查找正则表达式模式后的一个斜杠,之后的一个斜杠,后面是替换模式,后跟斜杠以指示替换模式的结束,并可选地后跟一些正则表达式标志。因此,我正在使用的片段是:
<snippet>
<content><![CDATA[
${SELECTION/^\/dev\/myproject\///}
]]></content>
<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
<!-- <tabTrigger>hello</tabTrigger> -->
<!-- Optional: Set a scope to limit where the snippet will trigger -->
<!-- <scope>source.python</scope> -->
</snippet>
这只是从字符串(^
)的开头匹配,然后是文字/dev/myproject/
(遗憾的是变量不能用于正则表达式模式,否则我们可以使用$project_path
并且没有任何东西替换它。因为我们只期待一场比赛,所以我们不需要使用g
lobal正则表达式修饰符标记。
我们从中选择/dev/myproject/components/flower.html
获得的输出是:
components/flower.html
这似乎是我们想要的,因为在http://localhost:8080/app/
之前,它变为http://localhost:8080/app/components/flower.html
。
所以,现在我们可以将变量部分从代码段中删除,并将SELECTION
替换为file_path
,这样它就可以在当前文件的路径上运行而不是选择,就像你最初一样,并将其插入您的构建系统:
"cmd": ["open", "http://localhost:8080/app/${file_path/^\/dev\/myproject\///}"]