Visual studio 代码用户片段大写无法正常工作
Visual studio code user snippets capitalize not working properly
我写了这样的代码
"State": {
"prefix": "state",
"body": [
"const [, set${1:/capitalize}] = useState();"
],
"description": "Adds state"
},
我预计结果会是这样的(如果我在 $1 中输入 test
):
const [test, setTest] = useState();
但我得到这样的结果:
const [/capitalize, set/capitalize] = useState();
在官方文档中我发现了这样的规则:'${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
.
你能告诉我哪里做错了吗?
您可以对请求的输出使用以下代码段:
const [, set${1/(.*)/${1:/capitalize}/}] = useState();
输出将是(如果我输入 $1 作为测试):
const [test, setTest] = useState();
让我们看看为什么您的版本 ${1:/capitalize}
不起作用:
这是您从 https://code.visualstudio.com/docs/editor/userdefinedsnippets
中引用的语法片段的一部分
tabstop ::= '$' int
| '${' int '}'
| '${' int transform '}'
-snip-
transform ::= '/' regex '/' (format | text)+ '/' options
format ::= '$' int | '${' int '}'
| '${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
所以最初看起来 ${1:/capitalize}
是正确的,只是看上面语法的最后一行似乎
${' int ':' '/capitalize'
是一个有效的选项。但是您必须跟踪语法才能正确使用它。 format
语法只能用在 transform
中。我们在以下位置看到了这一点:
transform ::= '/' regex '/' (format | text)+ '/' options
所以你的版本不包含转换。您没有必要的 regex
先行者。所以那些 '/upcase' | '/downcase' | '/capitalize'
选项只能用作正则表达式转换的一部分(虽然你可以有一个空的正则表达式,但这对你没有帮助,无论如何你仍然需要有正则表达式入口点)。
这是变换的一般形式:
${someInt/regex captures here/do something with the captures here, like ${1:/capitalize} /}
请注意,第一个 $someInt
是一个制表位 - 例如,它可能是 </code>,但第二个 <code>
(带有大写)是 不是tabstop 而是对前面正则表达式中 第一个捕获组 的引用。因此,转换只能转换正则表达式捕获的内容。
语法要求 format
选项是 transform
的一部分,并且转换要求 format
中的 regex
和 $n
] 部分指的是捕获组而不是制表位变量。
我希望这一切都有意义。
我写了这样的代码
"State": {
"prefix": "state",
"body": [
"const [, set${1:/capitalize}] = useState();"
],
"description": "Adds state"
},
我预计结果会是这样的(如果我在 $1 中输入 test
):
const [test, setTest] = useState();
但我得到这样的结果:
const [/capitalize, set/capitalize] = useState();
在官方文档中我发现了这样的规则:'${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
.
你能告诉我哪里做错了吗?
您可以对请求的输出使用以下代码段:
const [, set${1/(.*)/${1:/capitalize}/}] = useState();
输出将是(如果我输入 $1 作为测试):
const [test, setTest] = useState();
让我们看看为什么您的版本 ${1:/capitalize}
不起作用:
这是您从 https://code.visualstudio.com/docs/editor/userdefinedsnippets
中引用的语法片段的一部分tabstop ::= '$' int
| '${' int '}'
| '${' int transform '}'
-snip-
transform ::= '/' regex '/' (format | text)+ '/' options
format ::= '$' int | '${' int '}'
| '${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
所以最初看起来 ${1:/capitalize}
是正确的,只是看上面语法的最后一行似乎
${' int ':' '/capitalize'
是一个有效的选项。但是您必须跟踪语法才能正确使用它。 format
语法只能用在 transform
中。我们在以下位置看到了这一点:
transform ::= '/' regex '/' (format | text)+ '/' options
所以你的版本不包含转换。您没有必要的 regex
先行者。所以那些 '/upcase' | '/downcase' | '/capitalize'
选项只能用作正则表达式转换的一部分(虽然你可以有一个空的正则表达式,但这对你没有帮助,无论如何你仍然需要有正则表达式入口点)。
这是变换的一般形式:
${someInt/regex captures here/do something with the captures here, like ${1:/capitalize} /}
请注意,第一个 $someInt
是一个制表位 - 例如,它可能是 </code>,但第二个 <code>
(带有大写)是 不是tabstop 而是对前面正则表达式中 第一个捕获组 的引用。因此,转换只能转换正则表达式捕获的内容。
语法要求 format
选项是 transform
的一部分,并且转换要求 format
中的 regex
和 $n
] 部分指的是捕获组而不是制表位变量。
我希望这一切都有意义。