VSCode嵌套代码段(或在另一个代码段中包含一个代码段)

问题描述 投票:0回答:1

我想知道我是否可以在VSCode用户定义的代码段中引用另一个代码段。

说我有

"Test1": {
        "prefix": "snippet_test1",
        "body": 
            "something"
}

并且有一种方法可以将snippet_test1插入另一个类似的代码段中

"Test2": {
        "prefix": "snippet_test2",
        "body": 
            "${1:snippet_test1}"
}

现在snippet_test2仅输出snippet_test1,而不是snippet_test1的内容。

visual-studio-code code-snippets
1个回答
0
投票

假设您有这三个摘要(在某些摘要文件中:)>

"snippet1": {
  "prefix": "sn1",
  "body": [
    "body of snippet1",
    "snippet3 = $2",
    "$1",
    "some other stuff",
    "${1:snippet2}",
  ],
 "description": "build the multi-snippet"
},

"snippet2": {
  "prefix": "sn2",
  "body": [
      "body of snippet2",
  ],
  "description": "insert2"
},

"snippet3": {
  "prefix": "sn3",
  "body": [
     "I am snippet3",
  ],
  "description": "insert3"
},

然后您的宏将先打印snippet1,然后将光标移至任何位置-在snippet1中,光标最初将同时位于$ 1 tabstop位置-宏将插入第二个snippet2。

然后在宏中使用"jumpToNextSnippetPlaceholder",命令,您将跳至下一个制表位$ 2,该位置可能在任何位置-我将其放在$ 1之前(插入snippet2的位置),并将snippet3插入该位置。

您可以看到snippet1是在其中构建用于插入其他摘录的结构的位置-根据tabstops。

宏看起来像这样(在您的settings.json中:)]

"multiCommand.commands": [
    {
      "command": "multiCommand.insertMultipleSnippets",
      "sequence": [
        {
          "command": "editor.action.insertSnippet",
          "args": {
            "name": "snippet1",
          }
        },
        {
          "command": "editor.action.insertSnippet",
          "args": {
            "name": "snippet2",
          }
        },
       "jumpToNextSnippetPlaceholder",
       {
        "command": "editor.action.insertSnippet",
        "args": {
          "name": "snippet3",
        }
      },
    ]
  }
],

然后使用一些键绑定(keybindings.json)触发宏:

 { 
   "key": "alt+m",  // or whichever keybinding you choose
   "command": "multiCommand.insertMultipleSnippets",
 },

您不能使用任何代码段前缀来触发整个宏,但是如果需要,您仍然可以使用各个代码段前缀来单独触发每个代码段。

使用上面的snippet1,snippet2和snippet3,运行宏的结果将是:

body of snippet1
snippet3 = I am snippet3
body of snippet2
some other stuff
body of snippet2
© www.soinside.com 2019 - 2024. All rights reserved.