【问题标题】:How to join lines adding a separator?如何加入行添加分隔符?
【发布时间】:2014-08-08 10:23:02
【问题描述】:

命令J 加入行。
命令gJ 加入删除空格的行

还有一个命令可以加入行之间添加分隔符吗?

例子:

输入

text
other text
more text
text

我想做什么:
- 选择这 4 行
- 如果开始时有空格和/或 EOL 删除它们
- 加入行在它们之间添加分隔符'//'

输出

text//other text//more text//text

【问题讨论】:

    标签: regex join vim lines separator


    【解决方案1】:

    您可以为此使用:substitute,匹配\n

    :%s#\s*\n\s*#//#g
    

    但是,这也会在末尾附加分隔符(因为范围中的最后一行也有换行符)。您可以手动删除它,或者指定 c 标志并在最后一个之前退出替换,或者将范围减少 1 和 :join 最后一个:

    :1,$-1s#\s*\n\s*#//#g|join
    

    【讨论】:

    • +1 - 我正在尝试类似1,$-1norm A//|join 的东西,但不知何故这不起作用。它将连接附加到?你碰巧知道为什么吗?是因为正常的命令吗? (注意:在 // 和 | 之间有一个转义,但它在评论中丢失了)
    • @LievenKeersmaekers:您需要将:norm A 包裹在:execute 中; cp。 :h :bar
    • 哇漂亮的解决方案。谢谢英戈。
    • @Remonn,我使用# 来避免将// 替换为\/\/
    【解决方案2】:

    我写了一个插件“Join”,可以做你想做的事,还有更多。

    https://github.com/sk1418/Join

    除了内置:join命令提供的所有功能外,加入可以:

    Join lines with separator (string)
    Join lines with or without trimming the leading/trailing whitespaces
    Join lines with negative count (backwards join)
    Join lines in reverse
    Join lines and keep joined lines (without removing joined lines)
    Join lines with any combinations of above options
    

    查看主页以获取详细信息和示例/屏幕截​​图。

    【讨论】:

      【解决方案3】:

      有几种方法可以做到这一点,但我建议尽可能采用最简单的方法 - 录制宏或执行多步命令,例如:

      追加到除最后一行之外的所有行

      • 使用替换 (:1,$-1s#$#//#)
      • 附加 (:1,$-1norm A//)

      然后使用视觉选择 (vGgJ) 或任何其他方法加入。

      除非您经常执行此操作,否则您很可能会忘记配置中的任何复杂命令或专用插件的存在,因此我建议使用通用的、经常使用的子步骤。

      【讨论】:

        【解决方案4】:

        另一个替代,为了多样性:

        :%s:\n\ze.://
        

        【讨论】:

          【解决方案5】:

          每行将列出 50 个项目,以空格分隔:

          seq 0 70 | xargs -L 50 | sed 's/ /,/g'

          输出:

          0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49
          50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-09-08
            • 2013-08-20
            • 2012-11-15
            • 2015-12-08
            • 2016-03-04
            • 1970-01-01
            • 1970-01-01
            • 2023-02-01
            相关资源
            最近更新 更多