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