删除单个换行符但使用Vim保留空行

时间:2016-05-17 18:41:50

标签: vim text line-breaks

是否可以删除单个换行符,但在Vim中保留空行(我猜是双行换行?)?我正在使用Vim的HardPencil插件进行一些文字处理,我喜欢硬线断线,因为它可以更容易地在文件周围反弹。但是,我需要在LibreOffice Writer或Word中共享这些信息,如果其他人编辑文件,那么硬换行就不会很好。澄清一下,这就是我所拥有的:

Line1.
Line2.
Line3.

Line4.
Line5.

这就是我想要的:

Line1. Line2. Line3.

Line4. Line5.

基本上硬线断开应该用空格替换,并且应该保留双线断点。

我尝试了:%s/\n的变体,但无法保留双重换行符。我发现了类似的问题herehere,但这些问题并非针对Vim。

2 个答案:

答案 0 :(得分:4)

您可以仅使用line+line break替换line,并使用否定展望\(\n\)\@!以确保其后面没有空行:

:%s/\(.\+\)\n\(\n\)\@!/\1 /

@ Peter_Rincker的清洁解决方案:

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

答案 1 :(得分:4)

gw(或gq)与动作一起使用(例如G)。

gwG

gw是Vim的段落格式化运算符" reflows"文本到所需的'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