排序Vim折叠

use*_*904 14 vim

我有一个看起来像这样的文件:

dog{{{
blah blah blah
}}}
cat{{{
blah blah
}}}
aardvark{{{
blah blah blah blah
}}}
Run Code Online (Sandbox Code Playgroud)

在我的vimrc中set foldmethod=marker,所以文件的内容全部折叠在花括号上.我的问题是,如何根据折叠标题对文件进行排序?我希望那个aarvaark部分先来,然后catdog.

一些折叠部分内有其他折叠.我不想对那些较低的折叠水平进行排序.该文件应按级别1级排序.

Ing*_*kat 5

关闭所有折叠(zM:set foldlevel=0)后,您可以使用删除dd和粘贴p来手动移动折叠块。这对于少量文本是可以的。

对于大文本,您必须自己编写排序功能,因为 Vim 不提供此类功能。可以使用以下算法:

  1. 使用文本中不存在的分隔符(例如<Nul>)将所有折叠线连接在一起。
  2. 执行:sort命令。
  3. 在特殊分隔符上取消加入范围。

对于错误处理和极端情况,实际上需要大量的实现工作。我在这里尝试过:https : //gist.github.com/4145501