Я думаю, что единственный способ включать или вкладывать фрагменты друг в друга - это использовать макрос или какой-либо другой программный способ. Вот решение, использующее расширение макроса 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"
},
Тогда ваш макрос напечатает *Сначала 1008 *, а затем, где бы ни находился курсор - курсор будет изначально находиться в обеих позициях табуляции $ 1 - макрос вставит фрагмент 1.
Затем с помощью команды "jumpToNextSnippetPlaceholder",
в макросе вы перейдете к следующемуtabstop $ 2, который может быть где угодно - я положил его до $ 1 (где вставлен snippet1), а snippet2 будет вставлен на tabstop $ 2.
Вы можете видеть, что Master Snippet
- это то, где вы строите структуру для вставки других фрагментов - согласно tabstops .
Макрос будет выглядеть так (в вашем 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",
},
Вы не можете использовать любой префикс фрагмента для запуска всего макроса, но вы все равно можете использовать отдельные префиксы фрагмента для запуска каждого снипиppet индивидуально, если хотите.
С вышеприведенными Master Snippet
, snippet1
и snippet2
результат запуска макроса будет:
body of master snippet
snippet2 = I am snippet2
body of snippet1
some other stuff
body of snippet1
Вы потеряете некоторую функциональность,как вставленный фрагмент не может быть предварительно выбран, как текст заполнителя - если используется как ${1:howdy}
, текст заполнителя howdy
просто перезаписывается первым вставленным фрагментом.