首页 > 解决方案 > VS 代码片段替换(转换)适用于变量而不是占位符

问题描述

据说 vs 代码在用户定义的片段中支持变电站,即转换。但它仅适用于(内置)变量而不是占位符。

请参阅以下代码段:

"substitution test" : {
    "prefix" : "abc",
    "body": [
        "${TM_FILENAME}",
        "${TM_FILENAME/^([^.]+)\\..+$/$1/}",
        "${TM_FILENAME/^([^.]+)\\..+$/${1:/capitalize}/}",
        "${TM_FILENAME/^([^.]+)\\..+$/${1:/upcase}/}",
        "${2:showMeInAllCapsWhenReferenced}",
        "${2/upcase}"
    ]
}

第 1-4 行的输出与预期的一样:

users.actions.ts
users
Users
USERS

在第 5 行有一个占位符,我在第 6 行再次引用它。我希望它显示两次,一次在我键入时显示,然后再次全大写。所以例如:

fooFoo
FOOFOO

但实际输出是

showMeInAllCapsWhenReferenced
${2/upcase}

是否可以替换/转换引用的占位符(当我键入时)?

标签: visual-studio-codecode-snippets

解决方案


你的最后两行应该是:

"${2:showMeInAllCapsWhenReferenced}",
"${2/(.*)/${1:/upcase}/}"

在最后一个选项卡之后,实际应用了转换(因此在技术上不是“在您键入时”占位符替换)。

占位符转换

插入的文本与正则表达式匹配,并且匹配项或匹配项(取决于选项)被替换为指定的替换格式文本。

因此,您不能像在第 5 行尝试那样仅使用 :/upcase 而不使用正则表达式捕获 - 它只能转换正则表达式匹配

查看语法部分:

transform   ::= '/' regex '/' (format | text)+ '/' options 

format   ::= '$' int | '${' int '}'

            | '${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'

            | '${' int ':+' if '}'

            | '${' int ':?' if ':' else '}'

            | '${' int ':-' else '}' | '${' int ':' else '}'

我们看到 :/upcase 必须遵循正则表达式。(“格式”,其中大写是一种,必须遵循“转换”中的“正则表达式”。)


推荐阅读