看看vscode documentation for user defined snippets,看来使用正则表达式转换可以执行if / else条件。
但是,我似乎找不到任何示例,并且我正努力理解仅基于BNF的正确语法。
有人可以解释它的语法吗?
例如,
让我说一个这样的代码段:
"body": [
"let color = '${1|white,black|}';",
"let hex = '${???}';"
]
如果为color==white
,我希望十六进制输出#fff
,否则为黑色#000
。
答案 0 :(得分:4)
这有效:
"color conditional": {
"prefix": "_hex",
"body": [
"let color = '${1};",
"let hex = '${1/(white)|(black)|(red)/${1:+#fff}${2:+#000}${3:+#f00}/}';" //works
],
"description": "conditional color"
},
但是,一旦我尝试使用默认占位符和其他选择(例如
),"let color = '${1|white,black|}';", // does not work
显然,您不能对默认占位符值进行摘要转换。参见transforms on placeholder values issues
我使用了更简单的if
转换样式,因此在这里:
${1/(white)|(black)|(red)/${1:+#fff}${2:+#000}${3:+#f00}
如果在这种情况下$[1}
有一个组1 white
,则用#fff
替换该组1,如果组2 (black)
替换为#000
,等
您可以将其设置为if/else
(white)
或不容易。
"let hex = '${1/(white)/${1:?#fff:#000}/}';" // any non-`white` entry will print `#000`.
${1:?
=>如果第1组(white)
打印#fff
,否则打印#000
vscode文档对这些条件替换不是很有帮助,如果您对其语法有更多疑问,请告诉我。