Поиск и замена в нескольких строках с преобразованием в нижний регистр в Vim - PullRequest
8 голосов
/ 18 мая 2010

Вот что я хотел бы сделать для каждого из множества файлов:

  • поиск всех вхождений <a href, затем начало выбора блока
  • выбор до первоговхождение >
  • преобразование всего соответствия в нижний регистр

1 Ответ

15 голосов
/ 18 мая 2010

Проверьте это:

s/<a href\(\_[^>]*\)>/<a href\L\1>/

Это говорит: соответствует <a href, за которым следует ноль или более символов, кроме >, включая символы новой строки (обозначенные \_), и, наконец, >. Замените его на <a href, захваченный текст преобразуется в нижний регистр (обозначенный \L), а завершающий >.

Очевидно, что вы один, если внутри вашего тега есть >, но такова жизнь.

(И в случае, если неясно, вы будете использовать это как :%s/.../... или :<range>s/.../.../ для небольшого диапазона .)

Чтобы использовать это для нескольких файлов, вы будете использовать windo, bufdo или tabdo (в зависимости от того, открыты ли файлы как вкладки, окна или просто как буферы). Там много документации:

В общем, это будет выглядеть примерно так:

:tabdo <range>s/.../.../
:windo <range>s/.../.../
:bufdo <range>s/.../.../ | w

Я добавил команду записи в версию bufdo, потому что она не может перейти к следующему буферу без сохранения текущего. Вы могли бы сделать это и для других, если вы хотите написать немедленно, но они будут работать без. Вы должны открыть все файлы - самый простой способ - просто vim <lots of files> получить их как буферы или vim -o <lots of files> получить их как окна (используйте -O для разделения по вертикали, а не по горизонтали).

...