3

Файл для редактирования имеет тип уценки, который имеет несколько разделов, украшенных строкой - , например:

Section 1
---------

Another Section
---------------

Я хотел бы изменить все - на = . В vim есть хороший подход? Предположим, что все строки раздела могут быть идентифицированы как -\+$ в vim, но с различной длиной. Я искал, но пока не нашел хорошего решения.

Благодарю.

2 ответа2

3

Ну, во-первых, я чувствую себя обязанным упомянуть, что есть сайт, посвященный vim вопросам...


Тем не менее, есть несколько способов, которыми вы можете достичь этого. Одним из способов будет использование "регистра оценки" в вашей команде замещения. Это будет выглядеть так:

:%s/-\+/\=repeat('=', len(submatch(0)))

По сути это говорит:

Замените одну или несколько черточек на '=', повторенную n раз, где n - количество черточек.

Это самый простой / очевидный способ, но он немного неуклюжий / многословный, что типично для команд замены, использующих регистр оценки.

Вы также можете сделать это с помощью глобальной команды. Это будет выглядеть примерно так:

:g/^-\+$/norm Vr=

По сути это говорит:

В каждой строке, содержащей только тире, введите Vr= как если бы я набрал ее сам.

V визуально выделит всю строку, а r= заменит весь выбор символами '='.

3

У вас также есть :global для контекстуализации замены.

:g/^-\+$/s/-/=/g

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .