我在 vim 中编写了一个文档,textwidth=80。现在我想将此文档粘贴到 libreoffice 中进行格式化。问题是换行符。在 libreoffice 中,行太短,因为 vim 在 80 个字符后插入了换行符。
我使用两个换行符(即按两次回车键)分隔段落。有什么方法可以删除所有单个 \n 字符,同时保留 \n\n 字符?
答案1
像这样
:%s/\(\S\)\n/\1
:%s/\n/&&
应该可以工作。嗯,这里确实可以。
第一个替换匹配一个“非空白字符”(可能更具体),后面跟着一个换行符,捕获该“非空白字符”以用于替换(\1
)。实际上,它将每个“段落”变成一行。
第二个将每个换行符替换为两个换行符。&
在替换中用于表示“匹配的文本”,因此,此处&&
表示“两个换行符”。可以这样写,:%s/\n/\r\r
但&&
要短一些。
答案2
您可以VipJ
在每一段中使用:
V
:开始逐行选择。ip
:选择整个段落。J
:将各行连接在一起。
因为您用双换行符分隔每个段落,所以我们可以录制一个宏来自动为我们执行此操作:
qqVipJ2jq
加入否段落合并,只需使用否@q
现在。
答案3
在 Vim 中有很多方法可以做到这一点,但我认为最简单的方法是:
:set tw=9999
gggqG
这会将光标移动到缓冲区的第一行 ( gg
),并重新格式化 ( gq
) 从那里到最后一行的所有行 ( G
)。参见
:help gq