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

Access Project Root Path in Sublime Text 3 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} 或类似的?

片段支持 PCRE-compatible 常规 expression-based 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)^匹配字符串的开头, \/ 是文字 / 字符, .* 匹配任何长度 (*) 的任何字符 (.) 的任何序列。捕获序列以一个文字 /(?=\bapp\b) 组是一个积极的前瞻,断言 app 可以提前匹配,但实际上并没有捕获它。 \b 之前的转义字符和在 app 之后表示 app 应该被分词字符包围(包括 /)。这是为了防止匹配这样的路径:

/Users/username/Code/company_web_app/app/Controllers/SomeClass.php

其中 app 在项目名称中。

最后,格式字符串部分 // 是空的,因为我们只想丢弃匹配项,而保留其余部分。

这里 example 更详细地解释了它是如何工作的。