VS代码段替换(转换)适用于变量而不是占位符

时间:2018-10-24 05:33:11

标签: visual-studio-code code-snippets

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}

引用的占位符(按我的输入)是否可以替换/转换?

1 个答案:

答案 0 :(得分:0)

您的最后两行应该是:

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

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

来自placeholder transforms

  

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

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

查看grammar部分:

  

transform :: ='/'regex'/'(格式|文本)+'/'选项

     

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

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

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

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

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

我们看到:/ upcase必须遵循正则表达式。

相关问题