2014-08-28 67 views
1

我有超过40000点的记录是这样的:VIM:如何复制一个记录

------ 
18 
1,5,0.33 
6,10,0.34 
11,15,0.36 
16,20,0.37 
21,25,0.40 
26,30,0.44 
------ 

而且我想改变这样的:

------ 
18 1,5,0.33 
18 6,10,0.34 
18 11,15,0.36 
18 16,20,0.37 
18 21,25,0.40 
18 26,30,0.44 
------ 

知道了:

  • 第一个数字之后的行数是可变的,但是总是> 1
  • 我知道录制宏,所以我想录制一个并播放它40000次。我只是想从用户的角度来看我必须键入
+1

你尝试过什么?你会如何手动解决这个问题?这样,你几乎在那里;这对于一个可靠的宏而言只是一小步。 – 2014-08-28 08:57:54

+0

我只是不知道如何通过''(是'Ctrl + r')粘贴像LK解释他的回答 – 2014-08-28 09:10:14

回答

1

下列顺序应该做的伎俩

dd<cr> 
:%norm I<c-r>*<bck> <cr> 

其中<cr>是回车和<c-r>是Ctrl + R

哪个键就知道

细分如下

  • dd删除包含字符的第一行acter你想插入
  • :%norm对文件的其余部分执行正常的命令
  • I负责插入行的前面。
  • <c-r>*粘贴删除的第一行内容,包括换行符。
  • <bck> <cr>清理换行,并添加一个空格

如果要键入它,然后:

  • 向下vey向下
  • Ctrl键v
  • /^-最多
  • I按Ctrlr*Backspace键

说明:

  • 转到第一个数字:向下v:选择模式; e去到单词的末尾
  • 复制:y
  • 可视模式逐块:按Ctrlv
  • 搜索与-然后年初增长第一行:/^-最多
  • 插入模式复制到所有行并粘贴当前缓冲区:ICtrlr*
+0

谢谢,完美! – 2014-08-28 09:09:02

1

另一种选择:

DJ 
:%s/^/<c-r>"/
+0

+1啊,这回答了我关于'dd'包括换行符的问题。 tx – 2014-08-28 09:27:51

+0

我编辑了LK的答案,以添加我刚刚应用于记录的解决方案。感谢您的解决方案! – 2014-08-28 09:29:10

+0

@OlivierPons - 我的回复中的'dd'可以被'DJ'取代,所以你不需要退格。 – 2014-08-28 09:32:19