假设您在 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
将光标置于所需段落内
类型:
vipJ
(vip
突出显示当前段落,J
连接所有行)
答案4
在 ESc 模式下,键入v
以启用 VISUAL 模式,然后通过箭头键选择所需的文本(突出显示),然后键入J
以连接所有行(删除换行符)。