背景
使用 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
要在替换中进行表达式评估,请参阅:
:help :s\=
:help submatch()
例如:
:%s/width="\([0-9]\{2\}\)"/\='width="'.(submatch(1)+10).'"'/g
进行表达式替换时,整个替换必须是一个表达式,因此必须连接(参见:help expr-.
)表达式的三个元素。分解如下:
\=
表明替换模式是一个表达式。
'width="'
第一个字符串。
(submatch(1) + 10)
将十添加到第一个子模式匹配(括在括号中),这样 Vim 就不会尝试在加法运算中包含前面的字符串。
'"'
以字符串形式结束的引号。
(请注意,我没有在细分中包含连接运算符。)