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"
        ]
    }
}