VS 代码片段:if/else 条件语法

2024-01-10

看着用户定义片段的 vscode 文档 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_grammar,看来使用正则表达式转换,您可以执行 if/else 条件。

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

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

例如,

假设我有一个这样的片段:

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

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


这有效:

"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

显然,您无法对默认占位符值进行片段转换。看关于占位符值问题的转换 https://github.com/Microsoft/vscode/issues/57052

我用的是比较简单的if变换样式,所以这里:

${1/(white)|(black)|(red)/${1:+#fff}${2:+#000}${3:+#f00}

如果有一个组1$[1}在这种情况下white然后将第 1 组替换为#fff如果第 2 组(black)用。。。来代替#000, etc.

你可以把它变成一个if/else (white)或者不太容易。

"let hex = '${1/(white)/${1:?#fff:#000}/}';"  // any non-`white` entry will print `#000`.  

${1:?=> 如果组 1 (white) print #fff,否则打印#000

vscode 文档对这些条件替换不是很有帮助,如果您对其语法有更多疑问,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VS 代码片段:if/else 条件语法 的相关文章

随机推荐