Vim 复制到数量不断增加的多行

Vim 复制到数量不断增加的多行,vim,Vim,在vim中,是否有一种方法可以在@ i、 e。 XMMN26@1MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac 变成 XMMN26@1 MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac XMMN26@2 MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac XMMN26@3 MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac XMMN

在vim中,是否有一种方法可以在@

i、 e。
XMMN26@1MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac

变成

XMMN26@1   MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac 

XMMN26@2   MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac 

XMMN26@3   MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac 

XMMN26@4   MMN26:D MMN26:G MMN26:S VSS nch_12od15_mac 
有办法吗

谢谢

凯文

有办法吗

是的,您需要
:hv\u g\u ctrl-a
。即:

1) 复制源行

2) 使用视觉块模式选择这些“数字”(第一个数字除外)

3) 执行
g^A
。瞧


因此,完整的顺序是
yy3pE^V2jg^A

您可以使用

Y5p   -- Yanks current line and copies it 5 times
并使用查找/替换来获得增量编号

%s/1 /\=line('.').' '
请注意,
\=行('.')
使用当前行号。根据您的要求,您可能希望添加如下内容
%s/1/\=行('.')+5'

编辑

一些替代方案。最后,这完全取决于确保search命令找到要替换的正确位置

%s/1/\=line('.')     -- this will fail if there's a 1 before the actual @1

%s/@1/\='@'.line('.')

%s/@\zs1/\=line('.')

%s/1\ze /\=line('.')
使用宏

:let @a=""
:let @a="yypf@\<c-a>"
10@a
:let@a=“”
:let@a=“yypf@”
10@a
在第一行中,我们清理宏“a”

 yy ..................... copy the first line
 p ...................... paste the copied line
 f@ ..................... jumps to @
 \<c-a> ................. as if you typed Ctrl-a (increase number)
在第二行,我们定义了宏“a”

 yy ..................... copy the first line
 p ...................... paste the copied line
 f@ ..................... jumps to @
 \<c-a> ................. as if you typed Ctrl-a (increase number)
yy。。。。。。。。。。。。。。。。。。。。。复制第一行
P粘贴复制的行
f@。。。。。。。。。。。。。。。。。。。。。跳到@
\ ................. 好像键入了Ctrl-a(增加数字)
OBS:为了使用诸如control或shift之类的按键,宏需要在双引号之间,而不是单引号之间

在第三行中,我们10次调用宏“a”

My(除其他外)有一个
gpp
映射,该映射粘贴在当前光标列上或之后找到的第一个十进制数


因此,在您的示例中,它将是
^eyy3gpp
(转到第一列的末尾,拉动行,以增量3次进行特殊粘贴)。

谢谢Matt。在我的使用案例中,我实际上需要复制到大量的行,并且数量不断增加,在这种情况下,我无法手动选择这些数字。@user11853665然后,请修改您的问题。也许,
%s
\=
,正如@LievenKeersmaekers所建议的那样,那时会更有用。但是,在设置开始条件之前,可能没有完整的答案。@user11853665您可能还需要阅读。谢谢Matt!很抱歉,我在原来的问题中不清楚
g^A
绝对值得记住,tx。如果你用任何不是数字的东西替换
XMMN26
中的
26
,你可以选择所有en just use
g^A
。谢谢你,列文,%s/1/\=line(“.”似乎也能用,那么它的效果是什么呢在('.')?@user11853665行之后-我搜索
1
,后跟
空格
将在替换的文本中再次添加空格。这是一个很好的短宏,但底层命令可能需要对操作进行一些解释。感谢Sergio的回复。第2行,yyf@\part,对于我的特殊情况,我应该用什么替换它?实际上我试过:let@a=“yyf@\(按原样),:let@a=“XMMN26@\”,也就是:let@a=”XMMN26@1,它们都返回“无效范围”。对不起,我是新来的,所以可能会错过一些明显的东西。我希望a写的笔记现在能帮助你更好@user11853665谢谢你的澄清,所以我再次检查,发现每次我点击10@a“,而不是生成10个增量编号的新行,而是在同一行中增加@之后的编号;我也注意到这一点10@a要生效,光标必须位于数字之前。看来我还遗漏了什么?对不起,我忘了宏中的
p
。我希望这个新版本能起作用。如果你看一下宏,现在,它有了p命令