递增寄存器n次跳过值

时间:2014-06-20 06:33:33

标签: regex vim vim-macros

我使用VIM玩500个单独的文件,使其中一个值独一无二。我不会粘贴它,因为它是一个完全的kludge:)

制作一个元素后,我有一个单独的文件,其中有500条记录用空行隔开。

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

因为在编写文件的过程中我无法解决如何增加@a的问题,所以我将其粘贴增量然后再将其拉回@a。

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

这一切都很好,除了每7个数字,increment命令跳过三个而不是XML0001.xml到XML0500.XML我得到XML001.xml到XML0763.xml或其附近。

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

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

EDIT 猜测它与0到9个寄存器失去轨道有什么关系?

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

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

1 个答案:

答案 0 :(得分:4)

增量之谜

由于您的数字以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', '')

插件推荐

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

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