Regex 如何添加分隔符来连接行?

Regex 如何添加分隔符来连接行?,regex,join,vim,lines,separator,Regex,Join,Vim,Lines,Separator,命令J连接行。 命令gJ连接删除空格的行 是否还有一个命令用于连接行,在行之间添加分隔符 例如: 输入: text other text more text text text//other text//more text//text 我想做什么: -选择这4行 -如果开始和/或结束时有空格,请将其删除 -连接行并在它们之间添加分隔符“/” 输出: text other text more text text text//other text//more text//text 您可以使用

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

是否还有一个命令用于连接行,在行之间添加分隔符

例如:

输入

text
other text
more text
text
text//other text//more text//text
我想做什么:
-选择这4行
-如果开始和/或结束时有空格,请将其删除
-连接行并在它们之间添加分隔符“/”

输出

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

您可以使用
:替换
,匹配
\n

:%s#\s*\n\s*#//#g
但是,这也会在末尾附加分隔符(因为范围中的最后一行也有一个换行符)。您可以手动删除该选项,或者指定
c
标志并在最后一个替换之前退出替换,或者将范围缩小一,然后加入最后一个替换:

:1,$-1s#\s*\n\s*#//#g|join
我写了一个插件“Join”,可以做你想做的事情,等等

除了内置的
: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

查看主页了解详细信息和示例/屏幕截图。

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

附加到除last by之外的所有行

  • 使用替换(
    :1,$-1s$$//
  • 追加(
    :1,$-1norm A/
然后使用可视选择(
vGgJ
)或任何其他方法加入


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

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

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

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

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