在Sublime Text 3 Snippet中访问项目根路径

时间:2015-12-30 03:10:21

标签: sublimetext3 sublimetext-snippet

我试图找到一种方法来从代码段中的项目根目录中访问文件路径。

我可以使用${TM_FILEPATH}访问完整的文件路径,但我正在尝试设置一个文件文档片段,它会自动获取添加到文档块的路径,如下所示:

/**
 * app/Controllers/MyClass.php
 *
 * Class summary here.
 *
 * @author Author Name <name@example.com>
 * @copyright  2016 Company Name
 * @package  MyClass
 */

只有TM_FILEPATH我明白了:

/**
 * /Users/username/Code/project/app/Controllers/MyClass.php
 *
 * Class summary here.
 *
 * @author Author Name <name@example.com>
 * @copyright  2016 Company Name
 * @package  MyClass
 */

有没有办法解析${TM_FILEPATH}以获得我需要的部分,或者是否可以设置一个我可以自己使用的变量,如${ROOT_PATH}或类似的?

1 个答案:

答案 0 :(得分:2)

Snippets支持基于PCRE的基于正则表达式的substitutions。以下替换应该执行您正在寻找的内容,假设您要保留的路径部分始终以app 开头:

<snippet>
    <content><![CDATA[${TM_FILEPATH/^\/.*\/(?=\bapp\b)//}]]></content>
    <tabTrigger>filepath</tabTrigger>
    <description>path to current file</description>
    <scope>source.php</scope>
</snippet>

要将其细分,我们的输入为TM_FILEPATH,然后我们的捕获序列(由/分隔)为^\/.*\/(?=app)^匹配字符串的开头,{ {1}}是文字\/字符,/匹配任意长度(.*)的任何字符序列(.)。捕获序列以文字结尾*/组是一个积极的前瞻,断言(?=\bapp\b)可以提前匹配,但实际上并未捕获它。app之前和之后的转义符{ {1}}表示\b应该被分词符号(包括app)包围。这是为了防止匹配这样的路径:

app

其中/位于项目名称中。

最后,格式字符串部分/Users/username/Code/company_web_app/app/Controllers/SomeClass.php 为空,因为我们只想丢弃匹配,剩下的就剩下了。

这是一个example,更详细地解释了它是如何运作的。