删除单行换行符但使用Vim保留空行
问题描述:
在Vim中删除单行换行符但保留空行(我猜想是双行换行符)吗?我使用Vim的HardPencil插件来做一些文字处理,并且我喜欢硬线断裂,因为它可以让文件更容易反弹。但是,我需要在LibreOffice Writer或Word中分享这些信息,如果其他人编辑文件,强行换行不会很好。为了澄清,这是我有:删除单行换行符但使用Vim保留空行
Line1.
Line2.
Line3.
Line4.
Line5.
这是我想什么:
Line1. Line2. Line3.
Line4. Line5.
本质硬换行都应该用空格代替,并且双换行符应予以保留。
答
你可以只用line
取代line+line break
,并使用负前瞻\(\n\)\@!
,以确保它不跟一个空行:
:%s/\(.\+\)\n\(\n\)\@!/\1/
@ Peter_Rincker的清洁解决方案:
:%s/.\+\zs\n\ze.//
答
使用gw
(或gq
)与运动(如G
)。
gwG
gw
是Vim的段落格式算子“回流”文本到所需'textwidth'
。您可能需要暂时将'textwidth'
设置为0
以获取无限文字宽度(:set tw=0
)。
还有一些其他方面也做到这一点还有:
- 使用
:%!fmt
- 同样的想法上面一样,但使用fmt
外部工具和过滤器。 -
:v/^$/,//-j
- 将非空行挤在一起。如果范围的末尾没有空行,则失败 -
:g/\v(.+\zs\n)+/,-//j
- 同时挤压非空行,但避免前一方法的范围错误。 - 替代 - 见@Fabricator解决方案为例
如需更多帮助,请参见:
:h gw
:h operator
:h 'tw'
:h filter
:h :range!
:h :range
:h :v
:h :j
:h :g
:h magic
:h /\zs
我觉得这是非常接近。 '1号线。 2号线。 Line3“都适合出现在同一行上,就像'Line4'一样。 Line5.',但两者之间的空白行已被折叠。 – haff
随后,我想我可以在每次换行后添加一个空行。 – haff
@haff,我错过了。我猜你可以在这里使用负面观察,但正则表达式有点复杂 – Fabricator