Ste*_*eve 3 regex vim vim-macros
我一直在使用 VIM 处理 500 个单独的文件,以使其中一个值唯一。我不会粘贴它,因为它完全是一个拼凑:)
使一个元素唯一后,我有一个文件,其中包含 500 条记录,并用空行分隔。
录制一个宏来标记第 1 行,然后找到空白并标记上一行,然后将该块写入文件,@b 增加 1。
因为我无法弄清楚如何在写入文件期间递增 @a ,所以我将其粘贴递增,然后将其拉回到 @a 。
"ap0:let @a="""^MAywdd
Run Code Online (Sandbox Code Playgroud)
这一切都工作得很好,除了每 7 个数字增量命令会跳过三个数字,因此我得到的是 XML001.xml 到 XML0763.xml 或类似的内容,而不是 XML0001.xml 到 XML0500.XML。
为什么每 8 次调用就会跳过 3 个数字?
我只是很好奇,因为目前只要文件名是唯一的,它们的编号并不重要,但我最终需要使输出名称与 @b 的值相匹配。
编辑 疯狂猜测这与 0 到 9 寄存器丢失轨道有关?
有没有办法在插入模式下增加@a,例如
:'a,'b w XML"Increment @A".xml
Run Code Online (Sandbox Code Playgroud)
由于您的数字以 为前缀0,Vim 认为它们是八进制,因此增量(<C-a>我想是带有 )从 跳转07到10。要解决这个问题,您可以删除该(今天相当晦涩的)数字格式:
:set nrformats-=octal
Run Code Online (Sandbox Code Playgroud)
如果您的注册表仅包含该号码,您可以执行以下操作:
:let @a = @a + 1
Run Code Online (Sandbox Code Playgroud)
(注意:+=不起作用,因为寄存器是字符串类型。)
如果您的寄存器包含完整的文件名,您必须使用:help sub-replace-expression匹配第一个数字并递增它:
:let @a = substitute(@a, '\d\+', '\=submatch(0) + 1', '')
Run Code Online (Sandbox Code Playgroud)
我的EditSimilar 插件提供了一个命令,用于搜索不存在的偏移量,并将(缓冲区的一部分)写入其中:
:file XML0000.xml " Name the original buffer
:9999WritePlus " Writes XML0001.xml, XML0002.xml, etc.
Run Code Online (Sandbox Code Playgroud)