在 vscode 片段正则表达式中使用美元符号

use dollar sign in a vscode snippet regex

我正在尝试制作一个 vs 代码 php 片段,它从 $code 占位符输入生成这一行:

Utils::getLogger.debug("code", ["code" => $code])

我为此使用的正则表达式是/($?)(.*)/(我对第二个获取变量名的捕获组感兴趣)。

这是我的代码片段:

"log debug": {
    "prefix": ["log debug", "debug"],
    "body": ["Utils::getLogger.debug(\"${1/(^\$?)(.*)//}\", [\"${1/(^\$?)(.*)//}\" => ${1:variable}])"],
    "description": "Quick variable debug."
},

问题是它没有替换我输入的美元符号。如果我给 $variable 作为占位符,它会生成 Utils::getLogger.debug("$variable", ["$variable" => $variable]).

我让它适用于与美元符号不同的字符,例如逗号或其他字母,而且我使用 TM_SELECTED_TEXT 变量并在之前选择了我的变量。

我怀疑它与 vscode 中的 vs 代码 php 变量名自动完成冲突,就好像我复制我的变量然后调用代码片段并将变量粘贴到占位符中(而不是键入它),它也有效。

我很想 post 这是 vscode github 上的一个问题,但也许我在这里做错了。

ps:我知道也可以输入不带 $ 的变量名并将其添加到替换正则表达式中,但您知道开发人员如何...

这个有效:

"body": ["Utils::getLogger.debug(\"${2:${1/\$?(.*)//}}\", [\"\" => ${1:variable}])"],

请注意,由于您要重用第一个转换,我将它设置为占位符 </code>,方法如下:</p> <p><code>${2:${1/\$?(.*)//}}

现在您可以在任何需要相同转换的 结果 的地方重复使用该 </code> 占位符 - 如 <code>\"\" =>.

感谢 的使用。

经过讨论和进一步测试,我认为片段代码没有任何问题,它与 php 变量自动完成“冲突”。

答案中有一些有趣的优化。

供参考,我最终采用了输入不带$的变量名并将其添加到转换中的解决方案。

"log debug quick": {
    "prefix": ["log debug quick", "debug quick"],
    "body": ["Utils::getLogger.debug(\"${1:variable}\", [\"\" => \$]);"],
    "description": "Quick variable debug."
},

请注意,原始方法适用于 TM_SELECTED_TEXT 变量(因为自动完成不会发生),因此以下内容有效:

"log debug selection": {
    "prefix": ["log debug selection", "debug selection"],
    "body": ["Utils::getLogger.debug(\"${1:${TM_SELECTED_TEXT/^\$?(.*)//}}\", [\"\" => $TM_SELECTED_TEXT]);"],
    "description": "Quick variable debug."
},

请注意,我根据@Mark 和@rioV8 建议优化了代码段