是否可以使用 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。