2

Фон

Добавьте постоянное значение к числам, сопоставленным с регулярным выражением, используя vim (gvim).

проблема

Следующее регулярное выражение будет соответствовать width="32":

/width="\([0-9]\{2\}\)"

Вопрос

Как заменить числовое значение атрибута width результатами математического выражения, использующего значение атрибута? Например, я хотел бы выполнить следующую глобальную замену:

:%s/width="\([0-9]\{2\}\)"/width="\1+10"/g

Это даст width="42" для width="32" и width="105" для width="95" .

Спасибо!

1 ответ1

4

Чтобы выполнить оценку выражения в подстановке, см .:

:help :s\=
:help submatch()

Например:

:%s/width="\([0-9]\{2\}\)"/\='width="'.(submatch(1)+10).'"'/g

Когда вы выполняете подстановку выражений, вся подстановка должна быть выражением, поэтому вам нужно объединить (см . :help expr-.) Три элемента выражения. Сломано:

  • \=

Укажите шаблон замены является выражением.

  • 'width="'

Первая строка

  • (submatch(1) + 10)

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

  • '"'

Закрывающая кавычка в виде строки.

(Обратите внимание, что я не включил операторы конкатенации в разбивку.)

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