Vim 复制到数量不断增加的多行
在vim中,是否有一种方法可以在@ i、 e。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
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 useg^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命令