我想知道我是否可以在VSCode用户定义的代码段中引用另一个代码段。
说我有
"Test1": {
"prefix": "snippet_test1",
"body":
"something"
}
并且有一种方法可以将snippet_test1插入另一个类似的代码段中
"Test2": {
"prefix": "snippet_test2",
"body":
"${1:snippet_test1}"
}
现在snippet_test2仅输出snippet_test1
,而不是snippet_test1的内容。
我认为在彼此之间包含或嵌套片段的唯一方法是使用宏或其他编程方式。这是使用宏扩展名multi-command
的解决方案。
假设您有这三个摘要(在某些摘要文件中:)>
"Master Snippet": { "prefix": "master_snippet", "body": [ "body of master", "snippet2 = $2", "$1", "some other stuff", "$1", ], "description": "build the multi-snippet" }, "snippet1": { "prefix": "sn1", "body": [ "body of snippet1", ], "description": "insert1" }, "snippet2": { "prefix": "sn2", "body": [ "I am snippet2", ], "description": "insert2" },
然后您的宏将先打印
Master Snippet
,然后再打印光标所在的位置-光标最初将同时位于$ 1的两个制表位位置-宏将插入snippet1。
然后在宏中使用"jumpToNextSnippetPlaceholder",
命令,您将跳至下一个制表位$ 2,该位置可能在任何位置-我将它放在$ 1之前(其中已插入snippet1的位置),而snippet2将插入到制表位$ 2。
您可以看到Master Snippet
是您构建结构
宏看起来像这样(在您的settings.json中:)]
"multiCommand.commands": [ { "command": "multiCommand.insertMultipleSnippets", "sequence": [ { "command": "editor.action.insertSnippet", "args": { "name": "Master Snippet", } }, { "command": "editor.action.insertSnippet", "args": { "name": "snippet1", } }, "jumpToNextSnippetPlaceholder", { "command": "editor.action.insertSnippet", "args": { "name": "snippet2", } }, ] } ],
然后使用一些键绑定(keybindings.json)触发宏:
{ "key": "alt+m", // or whichever keybinding you choose "command": "multiCommand.insertMultipleSnippets", },
您不能使用任何代码段前缀来触发整个宏,但是如果需要,您仍然可以使用各个代码段前缀来单独触发每个代码段。
使用上面的
Master Snippet
,snippet1
和snippet2
,运行宏的结果将是:
body of master snippet snippet2 = I am snippet2 body of snippet1 some other stuff body of snippet1
[您确实失去了一些功能,就像不能像占位符文本那样预先选择插入的片段-如果像
${1:howdy}
这样使用,占位符文本howdy
只会被插入的第一个片段覆盖。