复制到数量增加的多行

时间:2019-08-21 00:25:20

标签: vim

vim中是否有一种方法可以将行下面的内容复制到多行,并在@之后增加数字

XMMN26@1 MMN26: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 

有没有办法做到这一点?

谢谢

凯文

4 个答案:

答案 0 :(得分:3)

  

有办法吗?

是的,您需要:h v_g_ctrl-a。那就是:

1)复制源行;

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

3)执行g^A。瞧!

因此,完整序列为yy3pE^V2jg^A

答案 1 :(得分:1)

您可以使用多次复制行

Y5p   -- Yanks current line and copies it 5 times

并使用查找/替换来增加编号

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

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

修改

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

%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('.')

答案 2 :(得分:1)

使用宏

:let @a=""
:let @a="yypf@\<c-a>"
10@a

在第一行,我们清理宏'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)

OBS:为了使用诸如控制之类的击键或移位,您的宏需要位于双引号之间,而不是单引号之间。

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

答案 3 :(得分:0)

我的UnconditionalPaste plugin有一个gpp映射,其中粘贴有在当前光标列上或之后找到的第一个十进制数字。

因此在您的示例中,它将是^eyy3gpp转到第一列的末尾,拉线,以3递增的特殊粘贴方式)。