#vim #replace #special-characters
#vim #заменить #специальные символы
Вопрос:
Я хочу заменить несколько материалов:
Мой исходный файл имеет:
<regSetting>
<registerAddr>0x0112</registerAddr>
<registerData>0x0A</registerData>
</regSetting>
<regSetting>
<registerAddr>0x0113</registerAddr>
<registerData>0x0A</registerData>
</regSetting>
Я хочу заменить 3 элемента:
1-й фрагмент:
<regSetting>
<registerAddr>
чтобы получить:
reg_write(
2-й фрагмент:
</registerAddr>
<registerData>
Чтобы получить:
,
3-й фрагмент:
</registerData>
</regSetting>
Чтобы получить:
);
Чтобы, наконец, получить:
reg_write(0x0112, 0x0A);
reg_write(0x0113, 0x0A);
Это легко заменяется, если мы используем notepad . Поскольку у нас есть опция без регулярных выражений, где поиск также может включать новые строки, он может найти все точные соответствия и заменить.
Я пробовал в Vim, но опция замены vim работает построчно. и я не смог найти подходящих ответов.
Это одно из таких требований, и аналогично у меня есть несколько замен, которые необходимо выполнить. Если это возможно в Vim, я хочу вырвать фрагмент и использовать его в приведенной ниже команде (заменить)
%s/ctrl "/new_word/g
Ответ №1:
вы можете выполнять поиск и замену по нескольким строкам в vim, см. раздел Поиск по нескольким строкам.
для выполнения своей задачи вы можете использовать, например:
%s/^s*<regSetting>_s*<registerAddr>(.*)</registerAddr>_s*<registerData>(.*)</registerData>_s*</regSetting>/reg_write(1, 2);/g
это длинно, но, я думаю, легко читается. в основном он соответствует всему <regSetting>
тегу и содержимому и фиксирует значения, затем заменяет совпадение, используя захваченные значения.
_s
шаблон будет соответствовать пробелу (пробел или табуляция) или символу новой строки.
Комментарии:
1. Я знал о,
s*
но не_s*
иs*
можете ли вы предоставить какую-нибудь ссылку для поиска этих параметров регулярных выражений2. Спасибо, это подходит для моего варианта использования. Было бы полезно, если бы вы могли дать подсказку о том, как продвигаться с визуальным выделением, включающим несколько строк, yank, а затем search / replace.
3. @ranjithkonaje ссылка, которую я предоставил в ответе, дает хорошее объяснение
_x
шаблонов, в противном случае, конечно, есть:help _s
, но я нашел это слишком кратким. «визуальный выбор нескольких строк, перетаскивание, а затем поиск / замена» Я не уверен, что правильно понял ваш запрос, вы можете вставить выдернутые строки в «панель» поиска с помощьюctrl r 0
.