2013-03-25 3 views
1

Я делаю простую команду поиска и замены в vim, и я пытаюсь избежать символов и /, поэтому я могу использовать их в своем поисковом выражении. Я понимаю, что есть более элегантные способы поиска HTML-тегов, но то, что я действительно ищу, - это локализованная команда поиска и замены, которая заменит <h1>UNKNOWN MISSION</h2> на <h2>UNKNOWN MISSION</h2>. Вот моя команда, где я пытаюсь избежать специальных символов:Регулярное выражение для поиска и замены HTML

:%s/\<h1\>UNKNOWN MISSION\<\/h2\>/\<h2\>UNKNOWN MISSION\<\/h2\>/ 

Образец не подходит. Есть идеи?

+0

Не могли бы вы просто заменить 'h1' на' h2'? В документе не должно быть другого текста, который содержит эту комбинацию символов. И вы можете найти и заменить по строке, чтобы вы (потенциально) не вмешивались в другие вхождения 'h1'. – mjgpy3

+0

Заголовок по-разному рассеивается по всему документу, и есть другие экземпляры h1 и h2, поэтому перемещение по строкам или просто замена h1 на h2 проблематично. – user1427661

ответ

3

:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/g

Кажется, что работает для меня. Вам нужно только избежать обратной косой черты.

+0

Как указано в заявлении ниже, использование альтернативного разделителя устранит необходимость избежать '/'. Также, поскольку в подстановке очень мало изменений, может быть использовано полное использование '\ zs' и' \ ze', чтобы отметить начало и конец совпадающего текста, чтобы замена стала проще. ':% s # UNKNOWN MISSION # 2 # g' Для дополнительной помощи см. ': h \ zs' –

1

Вам не нужно, чтобы избежать <> символов, попробуйте следующее:

:%s/<h1>UNKNOWN MISSION<\/h2>/<h2>UNKNOWN MISSION<\/h2>/ 
1

Я хотел бы сделать следующее ...

  1. Поместите курсор на первый экземпляр UNKNOWN MISSION с:

    /<h1<CR> 
    
  2. Yank до 2 с:

    yt2 
    
  3. Сделайте замену:

    :%s+<C-r>"2>+<C-r>"1> 
    

    , где <C-r>" используется для вставки содержимого регистра по умолчанию в командной строке и + используется в качестве альтернативного сепаратора для того, чтобы избежать побега косой черты. После вставки, вся команда выглядит следующим образом:

    %s+<h1>UNKNOWN MISSION</h2>+<h1>UNKNOWN MISSION</h1> 
    

/g Добавить флаг, если вам это нужно.

Смежные вопросы