Fat*_*lan 47
转到您的段落的开头并输入:
v i p J
对于整个文档,它与规范相结合:
:%norm vipJ
Run Code Online (Sandbox Code Playgroud)
此命令仅解包段落.我猜这是你想要的行为.
ib.*_*ib. 10
由于使用普通模式命令连接段落行已经被另一个答案所涵盖,让我们考虑通过面向行的Ex命令解决相同的问题.
假设光标位于段落的第一行.然后打开它,可以简单地将下一行连接到该段落的最后一行.一种方便的方法是运行:join专门为此目的设计的命令.要定义要操作的命令的行范围,除了明显的起始行(当前行)之外,还需要指定结束行.可以使用匹配段落末尾的模式找到它,即换行符后跟空行.因此,将所述定义转换为Ex-command语法,我们获得:
:,-/\n$/j
Run Code Online (Sandbox Code Playgroud)
对于要解包的所有段落,请在每个段落的第一行运行此命令.跳过它们重复给定操作序列的有用工具是:global命令.由于:global扫描从上到下排列,段落的第一行只是剩余未处理的第一行中的非空行.这个观察给了我们命令
:g/./,-/\n$/j
Run Code Online (Sandbox Code Playgroud)
这比直接的普通模式对应物更有效.
小智 5
问题:%norm vipJ在于,如果连续行少于 80 个字符,它也会连接它们,即使它们被空行分隔。例如下面的例子:
# Title 1
## Title 2
Run Code Online (Sandbox Code Playgroud)
会变成:
# Title 1 ## Title 2
Run Code Online (Sandbox Code Playgroud)
对于 ib 的回答,问题在于列表:
- item1
- item2
Run Code Online (Sandbox Code Playgroud)
变成:
- item1 - item2
Run Code Online (Sandbox Code Playgroud)
感谢这篇论坛帖子,我发现了另一种实现这一目标的方法,我将其封装在一个对我来说效果更好的函数中,因为它没有做任何事情:
function! SoftWrap()
let s:old_fo = &formatoptions
let s:old_tw = &textwidth
set fo=
set tw=999999 " works for paragraphs up to 12k lines
normal gggqG
let &fo = s:old_fo
let &tw = s:old_tw
endfunction
Run Code Online (Sandbox Code Playgroud)
编辑:更新了该方法,因为我意识到它不适用于 Linux 设置。删除包含fo如果此较新版本不适用于 MacVim 的行(我无法测试)。