我试图找到一种方法来从代码段中的项目根目录中访问文件路径。
我可以使用${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}
或类似的?
答案 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,更详细地解释了它是如何运作的。