Поиск и замена через несколько строк с преобразованием в нижний регистр в Vim

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

  • поиск всех случаев <a href затем начните выделение блока
  • выберите до первого вхождения >
  • преобразуйте все соответствие в нижний регистр
8
задан Keith Pinson 14 December 2012 в 23:54
поделиться

1 ответ

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

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

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

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

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

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

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

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

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

15
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: