将寄存器递增n次会跳过值



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

将一个元素设置为唯一后,我将得到一个包含500条记录的文件,这些记录由空白行分隔。

记录一个宏,标记第1行,然后找到空白,标记前一行,然后将该块写入一个文件,@b加1。

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

   "ap0:let @a="""^MAywdd

这一切都工作得很好,除了每7个数字,增量命令跳过三个,所以从XML0001.xml到XML0500.XML,我得到XML001.xml到XML0763.xml或左右。

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

我只是好奇,因为现在只要文件名是唯一的,它们的编号无关紧要,但我最终需要使输出名称匹配@b的值应该是什么。

编辑大胆猜测,这与0到9寄存器丢失跟踪有关?

有没有办法在插入模式下增加@a,比如

    :'a,'b w XML"Increment @A".xml 

增量之谜

由于您的数字以0为前缀,Vim认为它们是八进制,因此增量(我想是<C-a>)从07跳到10。要解决这个问题,您可以删除(今天相当晦涩的)数字格式:

:set nrformats-=octal

直接增量寄存器

如果你的寄存器中只有数字,你可以这样做:

:let @a = @a + 1

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

如果你的寄存器包含完整的文件名,你必须使用:help sub-replace-expression来匹配第一个数字并增加它:

:let @a = substitute(@a, 'd+', '=submatch(0) + 1', '')

插件推荐

My EditSimilar插件提供了一个命令,用于搜索不存在的偏移量,并向其写入(部分缓冲区):

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

相关内容

  • 没有找到相关文章

最新更新