Vim Regex замещающий вопрос - PullRequest
3 голосов
/ 16 марта 2011

Я пытаюсь заменить в VIM все несколько символов "-" (с начала строк) на "="

p.e. заменить "-----" на "====="
или замените "----------" на "=========="

Я создал это регулярное выражение:

%s/^-\{2,}/=  ????/g

Кто-нибудь знает, как я могу повторить замену "="? (что я должен поставить после "=")

Ответы [ 3 ]

5 голосов
/ 16 марта 2011

Попробуйте:

:%s/^-\{2,}/\=substitute(submatch(0), '-','=','g')/

или:

:%s/^-\{2,}/\=repeat('=',len(submatch(0)))/

Подробнее см. :help sub-replace-\=.

2 голосов
/ 16 марта 2011

Технически, %s/-/=/g делает работу, но для всего файла, в каждом -.

Если строки, которые вы хотите заменить, начинаются с -, я бы сделал это так:

g/^-/s/-/=/g

Или, если у вас есть место перед первым -:

g/^\s*-/s/-/=/g

Оставшаяся проблема появляется в следующих строках:

----------- the-composite-word

Они превращаются в:

=========== the=composite=word

Чтобы решить это, есть много способов.Я не тот мастер, чтобы предлагать очень общий способ, но это может работать для тире между словами:

g/^-/s/\w\@<!-/g
2 голосов
/ 16 марта 2011

Я уверен, что есть лучший ответ, но практически я бы сделал это как две отдельные операции просто для простоты:

%s/--/==/g
%s/=-/==/g

Сначала замените все двойные вхождения, которые превратили бы ----- в ====-. Затем исправьте остатки (=-), используя второй. Хотелось бы увидеть более элегантный ответ, если это возможно.

...