【问题标题】:VSCode snippets - how to run a regex transform on the 'choice' result?VSCode 片段 - 如何对“选择”结果运行正则表达式转换?
【发布时间】:2020-05-04 09:52:47
【问题描述】:

keybindings.json 中定义的这个 sn-p 中,我正在尝试对来自choice 对话的输入结果运行正则表达式转换 - 我需要插入两次相同的值,在第一个位置我需要第一个之前的部分分号和第二个位置我想要完整的选择值。

我尝试了文档中的示例,但它们似乎不适用于choice,还是我遗漏了什么?我如何做到这一点?

{
    "key": "cmd+alt+ctrl+t",
    "command": "editor.action.insertSnippet",
    "when": "editorTextFocus",
    "args": {
        "snippet": "Before semicolon: ${2/(\\w);{1,}/$1/} & Full value: ${2|1; testValue1, 2; testValue2|}"
    }
},

预期输出:

BeforeSemicolon: 1 & Full value: 1; testValue1

【问题讨论】:

    标签: visual-studio-code vscode-snippets


    【解决方案1】:

    经过一些实验,我发现部分工作。

    正则表达式匹配完整的字符串很重要。所以在最后加上.*

    (这应该添加到文档中)

    {
        "key": "cmd+alt+ctrl+t",
        "command": "editor.action.insertSnippet",
        "when": "editorTextFocus",
        "args": {
            "snippet": "Before semicolon: ${1/([^;]*).*/$1/} && Full value: ${1|123; testValue1,223; testValue2|}"    }
    },
    

    它只适用于第一个选项,AND你必须在选项文本内移动光标,只需 1 个 Left Arrow 就足够了,这接受选择但是保持场活跃。然后是 TAB。现在应用了变换。

    您必须为此提交错误。

    【讨论】:

    • 不确定 vscode 团队是否会将缺乏选择转换称为“错误”,而是称为“功能请求”。总而言之,变换有一段丑陋的历史,例如,参见github.com/Microsoft/vscode/pull/51621,其中几乎实现并合并了就地占位符变换(推测就地选择变换在这项工作之后会很简单)。但这些工作已经停滞不前,需要严格处理文档。
    【解决方案2】:

    不支持选择变量的转换。在https://github.com/Microsoft/vscode/pull/51621 上进行了一般性讨论。

    有几种解决方法,因为只要在 sn-p.然后其他地方的转换版本将起作用。此技术适用于占位符转换,但不适用于您尝试做的选择转换。为什么我不知道这种差异??

    使用一个占位符的更简单的解决方法 1:

    "snippet": "Before semicolon: ${1/([^;]*).*/$1/} && Full value: ${1:1; testValue1}"
    

    在这里,您必须接受默认占位符值 (1; testValue1) 或用另一个值覆盖它。然后在 tab 上,转换将应用于对同一制表位的任何其他引用。

    使用多个占位符的复杂解决方法 2(在本例中为 3 个“选择”:

    "snippet": "Before semicolon: ${1/([^;]*).*/$1/}${2/([^;]*).*/$1/}${3/([^;]*).*/$1/} && Full value: ${1:1; testValue}${2:2; testValue}${3:3; testValue}"
    

    在这里,您必须将您的三个(或您拥有的多个)选项列为单独的占位符制表位。然后您将要么 tab 接受你想要的占位符,要么 deletetab 那些你不接受。降低删除/制表符序列有点棘手,但一旦你拥有它,它就是重复的。您会看到光标似乎位于下一个“选择”的开头,但实际上它位于上一个“选择”的末尾。

    这是第 2 版的演示,我依次选择每个“选择”/占位符。 [我只是在这里使用 alti 键绑定来简化。]


    显然,如果您可能有很多“选择”,您可能会想要使用版本 1。如果您有少量的“选择”,但您希望看到并且不必键入,那么版本 2 确实有效挺好的。

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多