vim:如何复制一条记录

vim:如何复制一条记录,vim,macros,Vim,Macros,我有超过40000张这样的记录: ------ 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 我知道录制宏,所以我想录制一个并播放4000

我有超过40000张这样的记录:

------
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次。我只是想从用户的角度知道我必须键入哪些键

    • 下面的顺序应该可以做到这一点

      dd<cr>
      :%norm I<c-r>*<bck> <cr>
      
      dd
      :%I*
      
      其中,
      是回车,
      是Ctrl+r

      分项数字如下:

      • dd
        删除包含要插入的字符的第一行
      • :%norm
        对文件的其余部分执行普通命令
      • I
        负责在行前插入
      • *
        粘贴删除的第一行内容,包括换行符
      • 清理换行符并添加空格

      如果要键入,请执行以下操作:

      • 向下
        vey
        Down
      • Ctrl
        v
      • /^-
        向上
      • I
        Ctrl
        r*
        Backspace
      说明:

      • 转到第一个数字:向下,
        v
        :选择模式
        e
        转到单词的末尾
      • 复制:
        y
      • 视觉模式分块:Ctrl
        v
      • 搜索以
        -
        开头的第一行,然后向上搜索:
        /^-
        向上搜索
      • 插入复制到所有行并粘贴当前缓冲区的模式:
        I
        Ctrl
        r*
      另一种选择:

      DJ
      :%s/^/<c-r>" /
      
      DJ
      :%s/^/“/
      
      您尝试了什么?您将如何手动解决该问题?这样,您就快成功了;这只是实现可靠宏的一小步。我只是不知道如何通过
      粘贴(是
      Ctrl+r
      )就像LK在回答+1 Ah中解释的那样,这回答了我关于
      dd
      的问题,包括换行符。txI编辑了LK的回答,添加了我刚刚应用于记录的解决方案。谢谢你的解决方案!@OlivierPons-我回答中的
      dd
      可以被
      DJ
      替换,这样你就不需要退格了。有没有way是否不将其添加到所有选定行的开头,而是添加到所有选定行的末尾,无论行的长度如何?请在我的回答中将
      I
      替换为
      A
      ,或者在此回答中将
      ^
      替换为
      $