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
有没有办法做到这一点?
谢谢
凯文
答案 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递增的特殊粘贴方式)。