【发布时间】:2021-04-14 12:48:07
【问题描述】:
我正在尝试制作一个从$code 占位符输入生成此行的 vs 代码 php sn-p:
Utils::getLogger.debug("code", ["code" => $code])
我使用的正则表达式是/(\$?)(.*)/(我对第二个捕获组感兴趣以获取变量名)。
这是我的 sn-p 代码:
"log debug": {
"prefix": ["log debug", "debug"],
"body": ["Utils::getLogger.debug(\"${1/(^\\$?)(.*)/$2/}\", [\"${1/(^\\$?)(.*)/$2/}\" => ${1:variable}])"],
"description": "Quick variable debug."
},
问题是它不能替换我输入的美元符号。如果我将$variable 作为占位符,它会生成Utils::getLogger.debug("$variable", ["$variable" => $variable])。
我让它为不同于美元符号的字符工作,例如逗号或其他字母,而且我使用TM_SELECTED_TEXT 变量并在之前选择我的变量。
我怀疑这与vscode中的vs code php变量名自动完成有冲突,就像我复制我的变量然后调用sn-p并将变量粘贴到占位符中(而不是键入它),它也可以工作。
我很想在 vscode github 上发布这个问题,但可能在这里做错了。
ps:我知道也可以输入不带$ 的变量名并将其添加到替换正则表达式中,但您知道开发人员可以...
【问题讨论】:
-
我尝试了您的 sn-p,它按预期工作,它会删除
$(如果存在),$仅在您退出${1}字段时才会删除,它可以是简化为${1/^\\$?(.*)/$1/} -
为什么将第二个变换从
(^\\$?)(.*)改为(^,?)(.*)?如果您将这两个都设为(^\\$?)(.*),它将按您的预期工作。而且您不需要^正则表达式开始指示符 - 它们在这里没有做任何事情。 -
第二个捕获组
(^,?)是对另一个角色的测试,我没有在“最终”sn-p 中使用。我编辑了 -
@rioV8 感谢您的简化,但问题仍然存在,更多信息请参阅我对 Mark 的回复(TLDR:imgur.com/Wa9yaI7)
-
我没有安装 PHP 扩展,你可以提出一个 PHP 扩展的问题,它不应该完成字符串中的变量
标签: visual-studio-code vscode-snippets