如何在Vim中根据标题对段落进行排序?

12

假设我们有以下由空行分隔的段落:

B Heading
Lorem ipsum 1.
Lorem ipsum 2.

A Heading
Lorem ipsum 3.
Lorem ipsum 4.
如何根据标题对这些段落进行排序并获得以下文本?
A Heading
Lorem ipsum 3.
Lorem ipsum 4.

B Heading
Lorem ipsum 1.
Lorem ipsum 2.
2个回答

16

一种解决方案是在排序之前连接您的段落。

假设您的文本中不使用@符号,您可以使用:

:%s/\(.\+\)\n/\1@/

完成这个操作,然后您可以使用排序功能对行进行排序。

:sort

最后进行反向操作,以获取您的段落:

:%s/@/\r/g

这很聪明! - LandonSchropp
确实不错。为什么在 :%s/\(.\+\)\n/\1@// 的末尾需要第二个斜杠? - TransferOrbit
@TransferOrbit 这似乎是一个打字错误。让我们在回答8年后修复它 :). 谢谢! - Qeole

0

我编写了AdvancedSorters插件,将@Qeole的答案中给出的三个步骤简化为单个命令:

:SortRangesByHeader /\u Heading/

太棒了!我一直在寻找一种简单的方法来对折叠段落进行排序。我必须尝试你的插件并测试:SortUnfolded命令! - Qeole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接