Замена текста по списку в VSCode

Рейтинг: 0Ответов: 1Опубликовано: 13.04.2023

Подскажите, пожалуйста, возможно ли в VSCode как-то заменить текст по заранее сформированному списку соответствий? Ну, например:

A → а
B → б
C → ц

Желательно, чтобы какие-то значения искались как прямое совпадение, а какие-то - как совпадение с заданными регулярными выражениями. Может быть, есть готовые расширения для такого или же можно написать сниппет? Попробовал сделать сниппет сам:

"body": [

                                            "${TM_SELECTED_TEXT/А/А/g}",

                                            "${TM_SELECTED_TEXT/а/а/g}",

                                            "${TM_SELECTED_TEXT/Б/Б/g}",

далее аналогично для каждой буквы. (Эта часть должна преобразовывать в коде html entities в нормальный текст). Но в таком виде сниппет каждой строкой выполняет одно преобразование для всего текста и дублирует весь текст. Видимо, надо как-то весь список загнать в одну конструкцию, но я не знаю, как.

Синтаксис для сниппета брал вот отсюда, но там довольно скудное описание и маловато примеров, чтобы разобраться, практикуясь.

Ответы

▲ 0

Гугл не помог, а вот 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 не вставляем сразу, а вызываем сниппет, вставляется отредактированный код. Возможно, кому-то пригодится для обработки и по другим шаблонам.