vscode if/else 用户定义代码段中的条件
vscode if/else conditions in user defined snippet
查看 vscode documentation for user defined snippets,似乎使用正则表达式转换,您可以执行 if/else 条件。
但是,我似乎找不到这方面的任何示例,而且我正在努力理解仅基于 BNF 的正确语法。
有人可以解释一下这个的语法吗?
例如,
假设我有这样一个片段:
"body": [
"let color = '${1|white,black|}';",
"let hex = '${???}';"
]
如果color==white
,我要十六进制输出#fff
,否则如果黑色#000
.
这个有效:
"color conditional": {
"prefix": "_hex",
"body": [
"let color = ';",
"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
,则将第 1 组替换为 #fff
,如果第 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 文档对这些条件替换不是很有帮助,如果您对它们的语法有更多疑问,请告诉我。
查看 vscode documentation for user defined snippets,似乎使用正则表达式转换,您可以执行 if/else 条件。
但是,我似乎找不到这方面的任何示例,而且我正在努力理解仅基于 BNF 的正确语法。
有人可以解释一下这个的语法吗?
例如,
假设我有这样一个片段:
"body": [
"let color = '${1|white,black|}';",
"let hex = '${???}';"
]
如果color==white
,我要十六进制输出#fff
,否则如果黑色#000
.
这个有效:
"color conditional": {
"prefix": "_hex",
"body": [
"let color = ';",
"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
,则将第 1 组替换为 #fff
,如果第 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 文档对这些条件替换不是很有帮助,如果您对它们的语法有更多疑问,请告诉我。