【发布时间】:2009-05-18 04:47:12
【问题描述】:
在 Vim 中给出以下文本:
[2] [3] [4]
我想执行搜索和替换并生成以下内容:
[1] [2] [3]
我知道如何通过搜索和替换使用反向引用来提取数字:
:%s/\[\(\d\)\]/[\1]/g
但现在的问题是如何减少 \1 的值。
有什么想法吗?
【问题讨论】:
在 Vim 中给出以下文本:
[2] [3] [4]
我想执行搜索和替换并生成以下内容:
[1] [2] [3]
我知道如何通过搜索和替换使用反向引用来提取数字:
:%s/\[\(\d\)\]/[\1]/g
但现在的问题是如何减少 \1 的值。
有什么想法吗?
【问题讨论】:
试试
:%s/\[\(\d\+\)\]/\=join(['[', submatch(1) - 1, ']'], '')/g
编辑:我在\d 之后添加了一个\+,以防您想匹配多个数字。
【讨论】:
当您使用\zs 和\ze 锚定括号内的数字而不匹配它们时,替换变得更简单,因为您不需要在替换中连接:
:%s/\[\zs\d\+\ze]/\=submatch(0)-1/g
【讨论】:
试试这个:
%s:\d:\r&\r:g
然后
s/\d/\=submatch(0)-1/
现在你需要加入这些行。
【讨论】: