代码之家  ›  专栏  ›  技术社区  ›  Andreas Grech

获取另一行上的文本,在Vim中使用ex

  •  1
  • Andreas Grech  · 技术社区  · 14 年前

    file1.txt
    file2.txt
    file3.txt
    
    renamed1.txt
    renamed2.txt
    renamed3.txt
    

    我想要一个如下的转换:

    file1.txt renamed1.txt
    file2.txt renamed2.txt
    file3.txt renamed3.txt
    

    我的想法如下:

    :1,3 s/$/ <the text that is 4 lines below this line>
    

    <the text that is 4 lines below this line> 部分。

    .+4 (当前行下4行)但无效。

    3 回复  |  直到 14 年前
        1
  •  7
  •   Dave Kirby    14 年前

    1) 在每个“重命名”行的开头插入空格,例如。 :5,7s/^/ /

    ctrl-v )选择所有“文件”行,然后按 d 删除它们

    3) 再次使用分块视觉选择选择所有重命名行开头的空格字符,然后按 p

        2
  •  4
  •   rampion    14 年前
    :1,3:s/\ze\n\%(.*\n\)\{3}\(.*\)/ \1
    

     \ze - end of replaced part of match - the string matched by the rest of the pattern will not be consumed
     \n - end of current line
     \%(.*\n\)\{3} - next 3 lines
     \(.*\) - content of 4th line from here
    

    这将保留后面的行。

        3
  •  3
  •   Daenyth    14 年前

    我真的会为此做一个宏。删除下一行,上移,粘贴, J 输入行,然后对其他行运行宏。我认为另一个合适的方法是使用一个单独的脚本作为过滤器。