我认为您可能会成为假设的受害者,即当您使用替换来重写字段(或在本例中为变量)时,整个变量将被正则表达式中的替换文本替换。
实际上发生的是正则表达式匹配,变量中的匹配文本被替换为您在正则表达式中提供的替换,然后插入整个(新修改的)变量值。
例如,采用以下代码段:
<snippet>
<content><![CDATA[
${TM_FILEPATH/./=/}
]]></content>
<tabTrigger>lpc</tabTrigger>
<description>Last path component of the current file</description>
</snippet>
那就是“匹配任何字符,用等号替换它”。如果您扩展此代码段,结果是:
=home/tmartin/Test/sample.txt
第一个斜线匹配并被替换,然后变量扩展为一条奇怪的断路。
因此,为了仅捕获最后一个路径组件,您使用的正则表达式必须完全消耗整个变量值,以便替换只用您想要的部分替换整个值。
一个(可能是笨拙的)例子就是这个片段:
<snippet>
<content><![CDATA[
${TM_FILEPATH/^.*\/([^\/]+)\/[^\/]+$/$1/}
]]></content>
<tabTrigger>lpc</tabTrigger>
<description>Last path component of the current file</description>
</snippet>
现在,它从字符串的开头开始贪婪地匹配所有内容,然后是一个斜杠,然后是一个捕获最后一个路径段的捕获组,然后是一个最后一个斜杠和该行的其余部分,直到字符串的末尾。
在这种情况下,替换更符合您的预期:
Test