Вот решение vscode. Вам понадобится некоторое расширение макроса для запуска нескольких команд подряд. Здесь я использую мультикоманду например. См. https://marketplace.visualstudio.com/items?itemName=ryuta46.multi-command
settings.json:
{
"command": "multiCommand.createTextBlock2",
// "interval": 350,
"sequence": [
"cursorEnd",
"cursorHomeSelect",
{
// pad with equal number of /'s before and after text
"command": "editor.action.insertSnippet",
"args": {
"snippet": "////////////////////////////// $TM_SELECTED_TEXT //////////////////////////////"
}
},
"cursorHomeSelect",
{
"command": "editor.action.insertSnippet",
"args": {
"name": "Create a Text Block",
}
},
"cursorDown"
]
},
Фрагмент (в одном из ваших файлов фрагментов):
"Create a Text Block": {
"prefix": "tb",
"body": [
"/////////////////////////////////////////////////////////",
"${TM_SELECTED_TEXT/(.*)(.{57})(\\1).*/$2/g}",
"/////////////////////////////////////////////////////////",
],
"description": "create a text block"
},
и привязка клавиш (keybindings.json)) для запуска макроса.
{
"key": "alt+b", // whatever binding you wish
"command": "multiCommand.createTextBlock",
"when": "editorTextFocus && !editorReadonly"
},
Для объяснения макроса:
У вас было 57 / в каждой строке без текста, так что это то, что я использовал - выбрал некоторое количество.
Шаг 1 макроса: текст выделяется и дополняется в начале и конце текста большим количеством символов /. Должно быть равное количество символов / до и после текста для регулярного выражения, чтобы сделать его магию - я использовал около 30 или около того.
Шаг 2: Фрагмент вставлен.
Интересная часть . Оставьте средние 57 символов строки, содержащей текст с регулярным выражением (.*)(.{57})(\\1).*
. \\1
- это обратная ссылка к тому, что было захвачено в первой группе захвата - поэтому группы захвата 1 и 3 будут одинаковой длины.
И группа захвата 2 будет нашим текстом, окруженным равным количеством символов / (если мы добавили и равным числом / перед преобразованием регулярного выражения, которое мы сделали). .*
в самом конце регулярного выражения - для обработки нечетного / четного количества символов в тексте.
regex101 demo - средние 25 символов
И см. Как разметить строку до определенной длины с помощью регулярных выражений замены и фрагментов для аналогичного вопроса о заполнении разных строк текста равной длины.