【问题标题】:Regex for variable name before period in Sublime Text snippetSublime Text片段中句点前变量名的正则表达式
【发布时间】:2015-06-05 23:47:07
【问题描述】:

所以我正在尝试为 Sublime Text 3 编写一个 sn-p,用于在对象上调用的 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(){

})

这里的问题是在sn-p的正则表达式中捕获myObject,这样我在写sn-p的时候就可以复用了。

到目前为止,我有一个正则表达式可以捕获任何适合我需要的 myObject(\w|\.)+\b\.。但我需要准确捕捉光标之前的那个。

还可以使用一些环境变量,比如光标所在行的内容、光标的水平位置……Official documentation for snippets in Sublime Text

可以吗?

【问题讨论】:

    标签: regex sublimetext3 sublimetext


    【解决方案1】:

    据我所知,你可以使用变量$TM_CURRENT_LINE来获取行的内容,但是唯一被替换的是tab trigger(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
    })
    

    更改后焦点在第一个字段(对象),因此您可以轻松编写它,然后您可以使用 tab 移动到下一个字段(功能内容)。 p>

    【讨论】:

    • 你有这种行为的文档吗?
    • @MattDMo 什么行为?使用制表符触发器时是否可以替换所有行?
    • 没关系。我在问$TM_CURRENT_LINE 无法被替换,但我刚刚做了一些实验,这似乎是真的,至少在最新的 ST3 开发版本中是这样。我认为真正解决OP问题的唯一方法是通过插件。我会看看我能把什么放在一起......
    • @MattDMo 好的,反正我没有任何关于它的文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多