Regex 将寄存器增加n倍将跳过值

Regex 将寄存器增加n倍将跳过值,regex,vim,vim-macros,Regex,Vim,Vim Macros,我一直在使用VIM处理500个单独的文件,以使其中一个值唯一。我不会粘贴它,因为它是一个完全混乱的:) 在使一个元素唯一之后,我有一个单独的文件,其中有500条记录,由一个空行分隔 记录一个宏来标记行1,然后查找空白并标记上一行,然后将该块写入具有@ 1递增的文件。 因为在编写文件的过程中我不知道如何增加@a,所以我粘贴了它,增加它,然后将它拉回到@a "ap0:let @a="""^MAywdd 这一切都很好,除了每7个数字增量命令跳过3个,因此我将XML001.xml改为XML076

我一直在使用VIM处理500个单独的文件,以使其中一个值唯一。我不会粘贴它,因为它是一个完全混乱的:)

在使一个元素唯一之后,我有一个单独的文件,其中有500条记录,由一个空行分隔

记录一个宏来标记行1,然后查找空白并标记上一行,然后将该块写入具有@ 1递增的文件。

因为在编写文件的过程中我不知道如何增加@a,所以我粘贴了它,增加它,然后将它拉回到@a

   "ap0:let @a="""^MAywdd
这一切都很好,除了每7个数字增量命令跳过3个,因此我将XML001.xml改为XML0763.xml或其他

为什么每第8次调用跳过3个数字

我只是好奇,因为目前只要文件名是唯一的,它们的编号并不重要,但我最终需要使输出名称与@b的值匹配

编辑 胡乱猜测这和0到9个寄存器丢失有关

有没有一种方法可以在插入模式下增加@a

    :'a,'b w XML"Increment @A".xml 
增量之谜 由于数字的前缀是
0
,Vim认为它们是八进制,因此增量(我想是
)从
07
跳到
10
。要解决这一问题,您可以删除该数字格式(目前相当模糊):

:set nrformats-=octal
直接递增寄存器 如果您的注册表仅包含该号码,您可以执行以下操作:

:let @a = @a + 1
(注意:
+=
不起作用,因为寄存器是字符串类型。)

如果注册表包含完整的文件名,则必须使用
:help sub replace expression
匹配第一个数字并将其递增:

:let @a = substitute(@a, '\d\+', '\=submatch(0) + 1', '')
插件推荐 My提供一个命令,用于搜索不存在的偏移量,并将(部分缓冲区)写入该偏移量:

:file XML0000.xml   " Name the original buffer
:9999WritePlus      " Writes XML0001.xml, XML0002.xml, etc.