Гугл не помог, а вот ChatGPT подсобил. В итоге сформировали с ним вот такую строку:
${TM_SELECTED_TEXT/(А)|(а)|(Б)|(б)|(В)|(в)|(Г)|(г)|(Д)|(д)|(Е)|(е)|(Ё)|(ё)|(Ж)|(ж)|(З)|(з)|(И)|(и)|(Й)|(й)|(К)|(к)|(Л)|(л)|(М)|(м)|(Н)|(н)|(О)|(о)|(П)|(п)|(Р)|(р)|(С)|(с)|(Т)|(т)|(У)|(у)|(Ф)|(ф)|(Х)|(х)|(Ц)|(ц)|(Ч)|(ч)|(Ш)|(ш)|(Щ)|(щ)|(Ъ)|(ъ)|(Ы)|(ы)|(Ь)|(ь)|(Э)|(э)|(Ю)|(ю)|(Я)|(я)|(\\[%|%\\])/${1:+А}${2:+а}${3:+Б}${4:+б}${5:+В}${6:+в}${7:+Г}${8:+г}${9:+Д}${10:+д}${11:+Е}${12:+е}${13:+Ё}${14:+ё}${15:+Ж}${16:+ж}${17:+З}${18:+з}${19:+И}${20:+и}${21:+Й}${22:+й}${23:+К}${24:+к}${25:+Л}${26:+л}${27:+М}${28:+м}${29:+Н}${30:+н}${31:+О}${32:+о}${33:+П}${34:+п}${35:+Р}${36:+р}${37:+С}${38:+с}${39:+Т}${40:+т}${41:+У}${42:+у}${43:+Ф}${44:+ф}${45:+Х}${46:+х}${47:+Ц}${48:+ц}${49:+Ч}${50:+ч}${51:+Ш}${52:+ш}${53:+Щ}${54:+щ}${55:+Ъ}${56:+ъ}${57:+Ы}${58:+ы}${59:+Ь}${60:+ь}${61:+Э}${62:+э}${63:+Ю}${64:+ю}${65:+Я}${66:+я}/g}
Сперва он пошел тем же путем, что и я - несколько инструкций в ряд. Но быстро исправился и предложил вариант с перечислением.
Дальше я попросил его дописать строку с двух букв (на которых тренировались) до всего алфавита. На этом он снова застопорился и начал предлагать какие-то, якобы, универсальные варианты для преобразования html entities в обычный текст. Но они не работали. Тогда я скормил ему список сопоставлений код-буква, после чего он выполнил полную сборку.
И далее самый крупный затык возник на том, что я попросил добавить в код удаление "[%" и "%]". Вернее, вначале я хотел, чтобы конструкция [%текст%] заменялась на текст.
Он все время пытался выполнить эту операцию, как-то пришпиливая ее отдельно, из-за чего не срабатывал весь код. Даже, когда я уже просто предложил убирать по отдельности "[%" и "%]". Тогда я предложил менять их на пустую строку. Но тут он тоже выдавал вариант, который не работал, типа ${1:+} - при применении [% менялось на текст ${1:+}, видимо, из-за отсутствия значения для замены.
И дальше уже, больше сам, путем экспериментов дошел, что, если вообще убрать конструкцию для замены, то найденное значение будет просто удаляться.
В итоге, какое-то решение найдено. Правда, на данный момент задачу оно целиком не решает, так как оказалось, что сниппет не срабатывает на больших кусках кода.
Если кто-то сможет подсказать оптимизацию или вообще иной путь, буду рад.
Upd. Если заменить TM_SELECTED_TEXT на CLIPBOARD, то получается обрабатывать текст большого объема.
Копируем код из исходника, далее в VSCode не вставляем сразу, а вызываем сниппет, вставляется отредактированный код.
Возможно, кому-то пригодится для обработки и по другим шаблонам.