Добавить постоянное значение в числовой атрибут XML

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",

Спасибо!

Dave Jarvis
источник

Ответы:

4

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

:help :s\=
:help submatch()

Например:

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

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

  • \=

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

  • 'width="'

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

  • (submatch(1) + 10)

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

  • '"'

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

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

Heptite
источник