【问题标题】:vscode if/else conditions in user defined snippetvscode if/else 用户定义代码段中的条件
【发布时间】:2019-08-06 17:11:12
【问题描述】:

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

但是,我似乎找不到任何这方面的例子,而且我很难理解仅基于 BNF 的正确语法。

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

例如,

假设我有一个这样的 sn-p:

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

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

【问题讨论】:

  • 不确定我想要做的事情是否可行。我只能让示例正则表达式与系统变量一起使用。似乎它可能不适用于用户定义的制表位。无赖
  • 我会尽快添加答案。这是可能的,但显然不能使用默认占位符。

标签: visual-studio-code vscode-snippets


【解决方案1】:

这行得通:

"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

显然,您不能对默认占位符值进行 sn-p 转换。见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 文档对这些条件替换不是很有帮助,如果您对其语法有更多疑问,请告诉我。

【讨论】:

  • 第一个示例由于某种原因实际上对我不起作用...它只是像每个制表位一样编辑每个示例。您能否提供整个 sn-p 以便我看看是否发生了其他事情...
  • 您可能需要再点击一次tab 才能使let hex 行中的转换生效 - 它会在一个制表符之后执行。
  • 是的,就是这样。感谢您提供非常完整的答案!
猜你喜欢
  • 2022-10-16
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
相关资源
最近更新 更多