VS Code:自定义代码段中的变量

时间:2019-08-03 16:21:58

标签: html visual-studio-code code-snippets

如何创建一个自定义代码段,该代码段将自动输入我在变量前缀中键入的值?

我想要一个可创建html起始标签注释块的代码段。例如,如果我输入/se hello,我希望结果为

<!-- $var start-->

<!-- $var end-->

$var替换为“ hello”的地方。谢谢您的阅读!

1 个答案:

答案 0 :(得分:1)

正如VSCode snippet docs所说的,它使用TextMate来为其片段提供动力。 TextMate使用$name${name:default}形式的变量,幸运地提供了$TM_CURRENT_WORD可能足以满足您的需求。但是,没有内置变量可以直接在代码段名称之后获取多个参数,即$arg1$arg2作为变量。以为您可以对内插的Shell代码执行类似的操作,但不幸的是:

  

该代码段语法遵循TextMate的代码段语法,其中带有“内插外壳代码”的例外情况和使用\ u;两者都不支持。

强调我的

但是对于这个简单的示例,下面的索引变量示例可能就足够了。

<!-- $1 start-->
    $0
<!-- $1 end-->

$i为您提供了一个需要填写的值,您可以使用制表符在每个选项之间切换。 $0是光标移到末尾的位置(默认情况下,代码段的末尾)。您可以选择执行以下操作:

<!-- ${1: default text} start-->
    $0
<!-- $1 end-->

它将开始看起来像:

<!-- default text start-->

<!-- default text end-->

同时选择了两个默认设置进行编辑。

所有这些在snippets.json文件中看起来像这样:

{
    "se": {
        "scope": "html",
        "prefix": "se",
        "body": [
            "<!-- ${1:default text} start-->",
            "\t$0",
            "<!--$1 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$0",
            "$BLOCK_COMMENT_START$1 end $BLOCK_COMMENT_END"
        ]
    }
}