Regex 将寄存器增加n倍将跳过值
我一直在使用VIM处理500个单独的文件,以使其中一个值唯一。我不会粘贴它,因为它是一个完全混乱的:) 在使一个元素唯一之后,我有一个单独的文件,其中有500条记录,由一个空行分隔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
记录一个宏来标记行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.