Специальный фрагмент для Sublime Text

В последние несколько дней мне пришлось использовать stackoverflow, в котором я нашел отличных и полезных разработчиков. Спасибо всем!!

Я работаю над большим проектом, и мне нужна помощь немного. Я работаю с файлом moodle xml в Sublime Text 3.

Это небольшая часть кода, который у меня есть:

<questiontext format="html">
  <text>Here is my sample text</text>
</questiontext>

Мне нужно преобразовать его в это:

<questiontext format="html">
  <text><![CDATA[<audio preload="auto"><source src="https://www.mywebsite.com/sample.mp3"></audio>Here is my sample text?]]></text>
</questiontext>

Дело в том, что у меня есть около 400 строк, которые мне нужно изменить таким образом. И текст "Вот мой образец текста" везде разный. Как я могу сделать такое преобразование? Создать фрагмент? Честно говоря, я посмотрел, как создать сниппет, но не могу понять, как создать такой... Все предложения приветствуются


person Linas    schedule 01.02.2017    source источник


Ответы (1)


Фрагмент используется для ввода часто используемого текста (т. е. фрагмента текста), чтобы сэкономить время при вводе нового текста. Если у вас уже есть текст, который нужно изменить, фрагмент не подойдет.

Для этого вы хотите что-то сделать с поиском и заменой и, в частности, используя Регулярное выражение, чтобы найти и сопоставить нужный текст.

Для приведенного выше примера процесс будет выглядеть примерно так:

Откройте панель замены, выбрав Find > Replace... в меню или используя соответствующую клавишу для вашей операционной системы (она видна в меню, если вы ее не знаете).

В появившейся внизу панели убедитесь, что включены «Регулярные выражения» и «Выделение совпадений», а «Сохранить регистр» выключено. См. подсказки инструментов на кнопках.

Затем в Find What введите текст, который вы хотите найти, например:

<text>(.*)</text>

Частью этого регулярного выражения является (.*), в котором говорится: «соответствуйте любой последовательности символов, включая отсутствие вообще, и захватывайте (сохраняйте) то, что вы выбрали».

Когда вы вводите текст, если вы посмотрите в буфер, вы увидите, что Sublime обрисовывает в общих чертах текст, который сопоставляется, поскольку мы включили «подсветку совпадений».

На панели Replace With введите следующий текст:

<text><![CDATA[<audio preload="auto"><source src="https://www.mywebsite.com/sample.mp3"></audio>\1\?]]</text>

Волшебная часть здесь - это тот бит в конце, который говорит \1\?; в котором говорится: «вставьте первое, что мы захватили, в поле поиска, за которым следует вопросительный знак»; остальной текст - это то, что вы указали в своем вопросе.

Если в вашем примере действительно не нужен вопросительный знак в конце текста (в вашем примере вы его добавили), вам не нужна часть \?.

Теперь вы можете нажать Replace или Replace All, и все экземпляры <text>something</text> будут заменены строкой замены, за исключением того, что не имеет значения, какая часть something, потому что текст из исходной строки будет сохранен.

В зависимости от ваших реальных обстоятельств вам может потребоваться настроить это соответствующим образом (скажем, если ваш текст примера не очень хорошо выложен или что-то в этом роде).

Я рекомендую что-то вроде этого руководства (на которое я также ссылался выше), чтобы получить больше информации. глубокое понимание происходящего. В частности, это объясняет, почему для добавления вопросительного знака нужно использовать \?, а не только ?, что я полностью упустил из виду, потому что это отличное упражнение для читателя. ;)

person OdatNurd    schedule 01.02.2017
comment
Ну, это должно работать нормально, но дело в том, что он должен включать полный код, я имею в виду также включать <questiontext format="html">, как в примере: <questiontext format="html"> <text>Here is my sample text</text> </questiontext>, потому что в коде есть некоторые другие области, которые включают <text></text>, но мне нужно изменить только те, которые имеет родителя <questiontext format="html"></questiontext>. P.S., в моем примере знак вопроса в конце ставить не надо, это была моя ошибка, но я понял Вашу мысль. - person Linas; 01.02.2017
comment
Сорр, я обнаружил, что для этого я могу использовать CTRL+ENTER. Все работает отлично! Вы сэкономили мне часы работы и позволили избежать множества ошибок в коде. СПАСИБО! - person Linas; 01.02.2017
comment
Чтобы преобразовать этот <questiontext format="html"> <text>Here is my sample text</text> </questiontext> в этот код <questiontext format="html"> <text><![CDATA[<audio preload="auto"><source src="https://www.mywebsite.com/sample.mp3"></audio>Here is my sample text]]></text> </questiontext>, я должен найти функцию в Sublime Text, а в поле поиска ввести этот код <questiontext format="html"> <text>(.*)</text> </questiontext>, а код в поле замены должен быть <text><![CDATA[<audio preload="auto"><source src="https://www.mywebsite.com/sample.mp3"></audio>\1\]]</text> ` - person Linas; 01.02.2017