使用Vim脚本复制行并增加变量中的数字

时间:2019-05-22 18:46:02

标签: vim

我想修改包含可变占位符的文件行,该占位符顺序编号。更具体地说,我想在Vim脚本中添加更多这些行。

我想复制并粘贴每行这些特定的次数,并在添加新行时增加变量中的数字。

我真的不知道我在做什么……但是经过大量的搜索,我得以将下面的命令拼凑在一起。

%g/06/s/-[0-9]\zs6\ze[>-]/\=(submatch(0)+1)/g

它将用指定数字的增量替换指定数字。

但是它只是修改了行。我要保留原始行,并以增加的数字放置原始行的副本。并执行指定的次数。

示例:

找到所有类似这样的行...

blah-blah <blah-variable-x-06> <blah-variable-z-06-blah>

a diff line <diff-variable-x-06> <diff-variable-z-06-diff>

让他们像这样

blah-blah <blah-variable-x-06> <blah-variable-z-06-blah>
blah-blah <blah-variable-x-07> <blah-variable-z-07-blah>
blah-blah <blah-variable-x-08> <blah-variable-z-08-blah>

等...直到达到指定的行数。

a diff line <diff-variable-x-06> <diff-variable-z-06-diff>
a diff line <diff-variable-x-07> <diff-variable-z-07-diff>
a diff line <diff-variable-x-08> <diff-variable-z-08-diff>

等...直到达到指定的行数。

这可能吗?如果可以,可以编写脚本吗?

1 个答案:

答案 0 :(得分:0)

不使用脚本而是记录并重复击键的解决方案可以吗?

对于给定的示例:

blah-blah <blah-variable-x-06> <blah-variable-z-06-blah>

我们将从开始录制并将其放入寄存器j开始(这是我的首选;选择您喜欢的任何一个)。然后,我们将复制该行并将其粘贴到下面。然后运行一个正则表达式来增加您的变量,然后完成记录的脚本。

qj
yy
p
:s/variable-[a-zA-Z]-\zs[0-9]*\ze/\=(submatch(0) + 1)/g
q

从此处,您可以将光标移至要对其执行操作的行上,并根据需要运行脚本多次:<n>@j,使得<n>是您要执行的行数希望创造。您将不得不修改正则表达式以适应行的实际结构,而不是给定的示例。

注意:这并不完美。您的数字,例如07将变为7,因此仍然有一些工作需要您清理,但是至少出现这种值的次数将受到限制。

或者,如果您的行的布局非常相似,以致您总是会有两个这样的变量,则可以搜索这些变量并递增它们。您必须告诉它不要八进制,这样它就不会从0710递增。另外,由于您在数字前使用连字符,因此实际上我们必须减小它的数量,因为它将它们视为负数。

qk
:let b:nrformats=&nrformats
:set nrformats=bin
yy
p
/variable-[a-zA-Z]-\zs[0-9]*\ze
<c-x>
n
<c-x>
:let &nrformats=b:nrformats
q

同样,您必须修复搜索以正确匹配您的实际使用情况。