我想修改包含可变占位符的文件行,该占位符顺序编号。更具体地说,我想在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>
等...直到达到指定的行数。
这可能吗?如果可以,可以编写脚本吗?
答案 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
,因此仍然有一些工作需要您清理,但是至少出现这种值的次数将受到限制。
或者,如果您的行的布局非常相似,以致您总是会有两个这样的变量,则可以搜索这些变量并递增它们。您必须告诉它不要八进制,这样它就不会从07
到10
递增。另外,由于您在数字前使用连字符,因此实际上我们必须减小它的数量,因为它将它们视为负数。
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
同样,您必须修复搜索以正确匹配您的实际使用情况。