在vim中加入段落内的行

dgg*_*dst 15 vim carriage-return newlines

假设您在 vim 中输入了一个自动换行的长文档,所以所有的行都被换行了,比如 79 个字符。您甚至可能已将格式应用于整个文档以按该长度断开所有行。

段落在文档中由空行分隔。

现在您决定根本不希望在段落内换行。

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

我已经做了这个快速而愚蠢的黑客攻击,但我正在寻找正确的方法。

:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ           - join all lines in the file
:%s/@@@@@/\r\r/g   - replace @@@@@ with line breaks
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 12

我认为这可以满足您的要求:确保文件末尾有一个空行,然后加入每个段落(以空行结尾)。

G:a

.
:g/^./ .,/^$/-1 join
Run Code Online (Sandbox Code Playgroud)

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

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


gar*_*ohn 12

这应该这样做:

:set tw=99999
gggqG
Run Code Online (Sandbox Code Playgroud)

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


小智 7

  1. 将光标设置在所需段落内

  2. 类型: vipJ

vip突出显示当前段落,J加入所有行)