VS Code:自定义代码段中的变量
VS Code : variables in custom snippet
如何创建一个自定义代码段,它会自动输入我在其前缀中键入的变量值?
我想要一个可以创建 html 开始结束标签评论块的片段。例如,如果我输入 /se hello
我希望结果为
<!-- $var start-->
<!-- $var end-->
其中 $var
替换为“你好”。感谢阅读!
作为 VSCode snippet docs says, it uses TextMate 为其代码片段提供支持。 TextMate 使用 $name
和 ${name:default}
形式的变量,幸运的是提供了 $TM_CURRENT_WORD
,这可能足以满足您的需要。但是,没有内置变量可以在代码段名称后直接获取多个参数,即 $arg1
和 $arg2
作为变量。以为您可以使用内插 shell 代码实现类似的效果,但不幸的是:
The snippet syntax follows the TextMate snippet syntax with the exceptions of 'interpolated shell code' and the use of \u; both are not supported.
强调我的
然而,对于这个简单的示例,以下索引变量示例可能就足够了。
<!-- start-->
[=10=]
<!-- end-->
$i
给你一个值来填写,你可以在每个值之间切换。 [=21=]
是光标到达末尾的位置(默认情况下是代码段的末尾)。您可以选择执行以下操作:
<!-- ${1: default text} start-->
[=11=]
<!-- end-->
它会开始看起来像:
<!-- default text start-->
<!-- default text end-->
选择两个默认值进行编辑。
这一切在 snippets.json
文件中看起来像这样:
{
"se": {
"scope": "html",
"prefix": "se",
"body": [
"<!-- ${1:default text} start-->",
"\t[=13=]",
"<!-- end-->"
]
}
}
正如@Mark 指出的那样,如果您希望它不仅仅适用于 HTML,您可以使用 $BLOCK_COMMENT_START
和 $BLOCK_COMMENT_END
,这将因每种语言而异。代码段将如下所示:
{
"se": {
// Leaving scope off will make it a global snippet
"prefix": "se",
"body": [
"$BLOCK_COMMENT_START ${1:default text} start $BLOCK_COMMENT_END",
"\t[=14=]",
"$BLOCK_COMMENT_START end $BLOCK_COMMENT_END"
]
}
}
如何创建一个自定义代码段,它会自动输入我在其前缀中键入的变量值?
我想要一个可以创建 html 开始结束标签评论块的片段。例如,如果我输入 /se hello
我希望结果为
<!-- $var start-->
<!-- $var end-->
其中 $var
替换为“你好”。感谢阅读!
作为 VSCode snippet docs says, it uses TextMate 为其代码片段提供支持。 TextMate 使用 $name
和 ${name:default}
形式的变量,幸运的是提供了 $TM_CURRENT_WORD
,这可能足以满足您的需要。但是,没有内置变量可以在代码段名称后直接获取多个参数,即 $arg1
和 $arg2
作为变量。以为您可以使用内插 shell 代码实现类似的效果,但不幸的是:
The snippet syntax follows the TextMate snippet syntax with the exceptions of 'interpolated shell code' and the use of \u; both are not supported.
强调我的
然而,对于这个简单的示例,以下索引变量示例可能就足够了。
<!-- start-->
[=10=]
<!-- end-->
$i
给你一个值来填写,你可以在每个值之间切换。 [=21=]
是光标到达末尾的位置(默认情况下是代码段的末尾)。您可以选择执行以下操作:
<!-- ${1: default text} start-->
[=11=]
<!-- end-->
它会开始看起来像:
<!-- default text start-->
<!-- default text end-->
选择两个默认值进行编辑。
这一切在 snippets.json
文件中看起来像这样:
{
"se": {
"scope": "html",
"prefix": "se",
"body": [
"<!-- ${1:default text} start-->",
"\t[=13=]",
"<!-- end-->"
]
}
}
正如@Mark 指出的那样,如果您希望它不仅仅适用于 HTML,您可以使用 $BLOCK_COMMENT_START
和 $BLOCK_COMMENT_END
,这将因每种语言而异。代码段将如下所示:
{
"se": {
// Leaving scope off will make it a global snippet
"prefix": "se",
"body": [
"$BLOCK_COMMENT_START ${1:default text} start $BLOCK_COMMENT_END",
"\t[=14=]",
"$BLOCK_COMMENT_START end $BLOCK_COMMENT_END"
]
}
}