是否可以使用 vim 将更改日志形式的文本从最旧优先转换为最新优先?

是否可以使用 vim 将更改日志形式的文本从最旧优先转换为最新优先?

是否可以使用 vim 将更改日志形式的文本转换为最新优先?

就像这样:

version 1.0

multi_line description for 1.0


version 1.01

multi_line description for 1.01

etc

我想把它转换成

version 1.90

multi_line description for 1.90


version 1.89

multi_line description for 1.89

etc

文本确实太长,无法手动转换。

PS.“多行描述”例如:

Added feature x
Fixed bug y
Removed element z
Updated file z

答案1

我假设您只是想扭转顺序,而不是重新排序。

这在我的小测试中有效:

:g/^version/,/\nversion\|\%$/m0

这假设任何以“version”开头的行都是您想要保留的部分的开头。一种更简单的方法是在文件末尾添加一个仅包含“version”的虚拟行,然后

:g/^version/,//-m0

忽略错误消息,并删除虚拟线。

不管怎样,这都会告诉 vim[range]m0在匹配的每一行上执行^version。该命令m0:move 0将指示的行移动到文件的开头。

在第二个版本中,范围从当前行(匹配的行^version)到下一个匹配的行减 1。如果可以多出两个字符,则添加点和 1: .,//-1相当于,//-

我给出的第一个版本设计了一个更复杂的模式来处理这样一个事实:在最后一个匹配项中,下一个匹配项的搜索将失败。在 vim 模式中,\%$指的是最后一行或 EOF。

相关内容