如何获取项目中文件的相对路径?

时间:2017-11-05 01:42:01

标签: sublimetext3

我想为我的应用创建一个构建系统,它将打开目标文件的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}"]

1 个答案:

答案 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\///}"]