用户定义代码段中的vscode if / else条件

时间:2019-08-06 17:11:12

标签: visual-studio-code vscode-snippets

看看vscode documentation for user defined snippets,看来使用正则表达式转换可以执行if / else条件。

但是,我似乎找不到任何示例,并且我正努力理解仅基于BNF的正确语法。

有人可以解释它的语法吗?

例如,

让我说一个这样的代码段:

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

如果为color==white,我希望十六进制输出#fff,否则为黑色#000

1 个答案:

答案 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文档对这些条件替换不是很有帮助,如果您对其语法有更多疑问,请告诉我。