3

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

使一个元素唯一后,我有一个文件,其中包含 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 
4

1 回答 1

4

增量之谜

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

:set nrformats-=octal

直接递增寄存器

如果您的寄存器只包含号码,您可以这样做:

:let @a = @a + 1

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

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

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

插件推荐

我的EditSimilar 插件提供了一个搜索不存在的偏移量的命令,并将(缓冲区的一部分)写入它:

:file XML0000.xml   " Name the original buffer
:9999WritePlus      " Writes XML0001.xml, XML0002.xml, etc.
于 2014-06-20T06:49:04.193 回答