Поиск и замена Vim - Регулярные выражения

Поиск и замена Vim - Регулярные выражения

Я хочу выполнить поиск и замену. Новая строка перед любым нецифровым символом должна быть заменена на табуляцию. Я пробовал

%s/\n\D/\t/g

но он заменил первый символ слова после новой строки, а это не то, что я хотел, т.е.

abcd
abcd

к

abcd   bcd

Я хочу сохранить aпосле новой строки.

решение1

Вы почти у цели, но ваше регулярное выражение заменяет и символ новой строкиинецифровое с табуляцией.

Как насчет замены каждого символа новой строки, за которым следует нецифровой символ, на символ табуляции?и та же самая нецифра?

%s/\n\(\D\)/\t\1/g

Экранирование немного запутанное, но в основном у вас есть группировка вокруг , \Dкоторая захватит все, что не является цифрой. Затем это ссылается на , \1чтобы вставить его после табуляции.

решение2

Один из способов сделать это — использовать маркер конца совпадения:

%s/\n\ze\D/\t/

Другой способ сделать это — использовать отрицательный просмотр вперед:

%s/\n\d\@!/\t/

Они не совсем эквивалентны, второй также заменит последний символ новой строки в файле.

решение3

Я надеюсь, что это поможет вам

:%s#\n.\D#\t#g

Связанный контент