首页 > 解决方案 > vscode if/else 用户定义代码段中的条件

问题描述

查看用户定义片段的vscode 文档,似乎使用正则表达式转换,您可以执行 if/else 条件。

但是,我似乎找不到任何这样的例子,而且我正在努力理解仅基于 BNF 的正确语法。

有人可以解释一下这个语法吗?

例如,

可以说我有一个这样的片段:

"body": [
    "let color = '${1|white,black|}';",
    "let hex = '${???}';"
]

如果color==white,我想要十六进制输出#fff,否则如果是黑色#000

标签: visual-studio-codevscode-snippets

解决方案


这有效:

"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

显然,您不能对默认占位符值进行片段转换。请参阅有关占位符值问题的转换

我使用了更简单的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 文档对这些条件替换不是很有帮助,如果您对它们的语法有更多疑问,请告诉我。


推荐阅读