我有一个包含以下行的文件:
img width="240" height="120"
我希望将宽度和高度缩放相同的量,以便
:%s/width="\\(.*\\)" height="\\(.*\\)"/width="2*\\1" height="2*\\2"/g
产生
img width="2*240" height="2*120"
无论如何都要让vi实际计算2*240=480
并将480
放在结果中。
感谢您的帮助。
答案 0 :(得分:4)
我可以接近你提出的问题
:s/\(\d\+\)/\=submatch(1)*2/gc
但我会使用外部过滤器。
答案 1 :(得分:1)
我通常会使用外部过滤器来处理这类事情:
:%!perl -pe 's/width="(\d*)"/sprintf "width=\"\%d\"", 2 * $1/e'
请注意,在直接运行perl时不会出现额外的转义。您必须转义%符号或vim将其扩展为当前文件名。
但你可以试试:
:help sub-replace-expression
如果您不想使用外部过滤器。