交替放置两个文本块的行

Place the rows of two blocks of text after each other alternatively

我有以下两段文字

abc
abc
cdz
zer
sdf



bfd
dss
azr
vvf
ezr

我想知道如何交替放置这两个块的行,以便得到如下的最终文本块:-

abc
bfd
abc
dss
cdz
azr
zer
vvf
sdf
ezr

这是受 this 问题启发的方法:

  1. 将每个块写入一个单独的临时文件:

    vip
    :'<,'>w /tmp/a
    <motion>
    vip
    :'<,'>w /tmp/b
    
  2. 把两块剪下来

  3. 插入paste的输出:

    :read !paste -d '\n' /tmp/a /tmp/b
    

使用宏一次移动 1 行:

  1. 开始录制宏,将光标放在第 1 行的第一个字符上
  2. 将光标向下移动 x 行直到第二块的第一行(在本例中 x=8)
    8j
    
  3. 使用 D 而不是 dd 来剪切这条线以保持两个块之间的距离
    D
    
  4. 将光标向上移动 x 行到第一行
    8k
    
  5. 粘贴我们刚刚剪切的线
    o[esc]p
    
  6. 将光标移动到下一个起始位置(下一行的第一个字符)
    j^
    
  7. 结束录制。
  8. 在每一行重播这个宏。