在Sublime Text片段中的期间变量名的正则表达式

时间:2015-06-05 23:47:08

标签: regex sublimetext3 sublimetext

所以我试图为Sublime Text 3编写一个代码片段,用于调用Objects上的forEach语句。

//what I have written at the point where the snippet is triggered
myObject.forEa

// what should appear after triggering the snippet
Array.prototype.forEach.call(myObject, function(){

})

此处的问题是在代码段的正则表达式中捕获myObject,以便在编写代码段时可以重复使用它。

到目前为止,我有一个正则表达式可以捕获任何适合作为我需要的myObject的内容:(\w|\.)+\b\.。但我需要捕获光标前的确切位置。

您还可以使用一些环境变量,例如光标的内容,光标的水平位置...... Official documentation for snippets in Sublime Text

能做到吗?

1 个答案:

答案 0 :(得分:2)

只要我知道,你可以使用变量 $ TM_CURRENT_LINE 来获取行的内容,但唯一被替换的是tab触发器( forEa ,该行的其余部分仍将存在。我举个例子和另一个例子。

示例(无法按预期工作):

<content><![CDATA[Array.prototype.forEach.call(${TM_CURRENT_LINE/^[ \t]*(\S*)\.$/\1/g}, function(){
    ${1:functionConent}
})]]></content>

更改

myObject.forEa

myObject.Array.prototype.forEach.call(myObject, function(){
    functionConent
})

所以,你可以使用行内容,但myObject.仍然在行的开头。

替代方案(不完全符合您的要求但工作正常):

我想你知道如何以这种方式做到这一点,但我认为最好这么做:

<content><![CDATA[Array.prototype.forEach.call(${1:object}, function(){
    ${2:functionConent}
})]]></content>

此更改

forEa

Array.prototype.forEach.call(object, function(){
    functionConent
})

更改后,焦点位于第一个字段(对象)中,因此您可以将其写入éasily,然后可以使用选项卡移动到下一个字段(功能内容)。