如何连接添加分隔符的行?

时间:2014-08-08 10:23:02

标签: regex join vim lines separator

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

是否还有一个命令来连接线在线之间添加分隔符?

示例:

输入

text
other text
more text
text

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

输出

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

5 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:3)

我写了一个插件" 加入",可以做你想做的事情,等等。

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

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

答案 2 :(得分:1)

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

附加到排除最后一行的所有行

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

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

每行将列出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