Vim: Как изменить регистр при замене
Недавно мы рассмотрели, как вставить совпавший шаблон в замещающий текст. В дополнение к простому использованию совпавшего шаблона как есть, Vim позволяет манипулировать регистром исходного шаблона при его замене.
\U
— При использовании в замещающем шаблоне всё после него пишется заглавными буквами.\L
— Всё, что стоит после него, пишется в нижнем регистре.\u
— Переводит в верхний регистр первого символа следующего за ним слова.\l
— Переводит в нижний регистр первый символ следующего за ним слова.\e
или\E
— останавливает перевод в верхний или нижний регистр.
Как их использовать? Что ж, мы можем объединить их с предыдущим советом по использованию &
в шаблоне замены. Или мы можем использовать пронумерованные захваты, такие как \1
, \2
и т.д., для более сложного сопоставления. В любом случае мы добавляем один из этих экранированных символов перед той частью, которой хотим манипулировать. Например, мы можем найти все адреса электронной почты и переписать их в нижнем регистре:
:%s/\S\+@\S\+/\L&/
Ключевой частью является \L
перед &
. Это означает, что весь следующий текст будет переведён в нижний регистр.
Вот ещё один. Допустим, мы хотим сделать часть имени в адресе электронной почты строчными буквами, но оставить название компании нетронутым. Таким образом, FirstLast@Company.com
станет firstlast@company.com
. В этом случае нужно использовать \e
(или \E
), чтобы завершить манипулирование регистром символов на полпути через шаблон замены. Окончательная строка замены будет выглядеть так:
:%s/\(\S\+\)\(@\S\+\)/\L\1\e\2/g
Важным моментом снова является замена. Мы используем \L
, чтобы начать изменять регистр на нижний, затем \1
для первого захвата (например, FirstLast
), затем \e
, для завершения изменения регистра на нижний, а затем \2
для второго захвата (например, @Company.com
). В результате первая часть email адреса написана строчными буквами, а всё остальное остаётся прежним.
Вот демонстрация первого преобразования email адреса (перевод всего адреса в нижний регистр):