我想做一个函数,它生成一个可变行数的文本块。文本应该如下所示:
1.wav
2.wav
3.wav
4.wav
...
我的函数看起来像这样:
function Rename(howmany)
normal i1.wav
normal yy
let iter = 1
while iter < a:howmany
normal pp0^Ayy "^A is generated from <Ctrl-V> <Ctrl-A>
let iter += 1
endwhile
endfunction
使用:call Rename(5)
生成的文本如下所示:
1.wav
1.wav
2.wav
2.wav
3.wav
3.wav
4.wav
4.wav
5.wav
注意重复的片段。如果我一次重新创建一个正常模式步骤(pp
-粘贴行,0
-转到行的开头,^A
-递增数字,yy
-拖动当前行以进行进一步复制)。
我做了一个快速修复,删除每隔一行。
该修复看起来像这样:
function Rename(howmany)
normal i1.wav
normal yy
let iter = 1
while iter < a:howmany
normal pp0yy
let iter += 1
endwhile
normal gg
let iter = 1
while iter < a:howmany
normal dd
normal
let iter += 1
endwhile
endfunction
有谁知道为什么会发生这种情况?以及我如何解决这个问题,这样我就不必绕过主要问题。
1条答案
按热度按时间r8uurelv1#
问题的原因很容易发现:
没有
pp
到yy
,只有p
。因此,pp
将默认寄存器中的文本放置两次:而你只增加第二个:
下一个循环将最后一行拉出来,再放两次:
等等
删除无关的
p
将解决问题: