在 vim 中合并段落内的行

在 vim 中合并段落内的行

假设您在 vim 中输入了一个较长的文档,并且启用了自动换行功能,因此所有行都在(例如)79 个字符处被换行。您甚至可能对整个文档应用了格式,以在该长度处换行所有行。

文档中的段落由空行划分。

现在您决定根本不想在段落内使用换行符。

如何在不完全消除段落边界的情况下删除段落内的所有换行符?

我已经做出了这个快速而愚蠢的破解,但正在寻找正确的方法。

:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ           - join all lines in the file
:%s/@@@@@/\r\r/g   - replace @@@@@ with line breaks

答案1

我认为这可以实现您的要求:确保文件末尾有一个空行,然后连接每个段落(以空行结束)。

G:a

.
:g/^./ .,/^$/-1 join

解释:首先转到文件末尾并用 添加一个额外的空行:a(也许有更优雅的方法;以交互方式,您可以用 替换前三行o<ESC>)。然后,对于尚未考虑的每个非空行(:g/^./),将join命令应用于从选定行开始的范围(.)并在下一个空行之前一行结束(/^$/-1)。

或者,:g/^$/d如果您不想保留任何空行(那么您可以删除-1)。

答案2

这应该可以做到:

:set tw=99999
gggqG

tw设置为至少与最长段落中的字符数一样大的值。gg将光标移动到第一行;gq是重新格式化的命令;G将光标移动到最后一行,告诉gq从当前光标位置重新格式化到最后一行。

答案3

  1. 将光标置于所需段落内

  2. 类型:vipJ

vip突出显示当前段落,J连接所有行)

答案4

在 ESc 模式下,键入v以启用 VISUAL 模式,然后通过箭头键选择所需的文本(突出显示),然后键入J以连接所有行(删除换行符)。

相关内容