Vim:使用多种模式排序

Car*_*ala 10 regex sorting vim

我知道,在vim中,我可以使用正则表达式对文件进行排序,以指示在使用以下方法排序时我想要使用的每行的哪些部分:

:sort 'regex' r
Run Code Online (Sandbox Code Playgroud)

是否可以组合多个表达式?

这里有一个例子:

INPUT:

bar a 2
foo b 1
bar b 1
foo a 2
Run Code Online (Sandbox Code Playgroud)

:sort'[az]'r

foo b 1
bar b 1
bar a 2
foo a 2
Run Code Online (Sandbox Code Playgroud)

排序'[0-9]'r

bar a 2
bar b 1
foo b 1
foo a 2
Run Code Online (Sandbox Code Playgroud)

预期(也许是"喜欢":排序'[AZ] | [0-9]'r?):

bar b 1
bar a 2
foo b 1
foo a 2
Run Code Online (Sandbox Code Playgroud)

请注意,由于那些"a"和"b"打破了数字顺序,所以裸"排序"不起作用

bar a 2
bar b 1
foo a 2
foo b 1
Run Code Online (Sandbox Code Playgroud)

VIM之外的另一种选择也被接受了,但是,为了好奇,我想知道它是否真的可以在VIM中进行(如果是更好的,如何;-)

非常感谢,问候

dev*_*ull 8

假设您有外部排序可用,以下应该有效:

:%!sort -k1,1 -k3,3n
Run Code Online (Sandbox Code Playgroud)

编辑:说明:

-k用于指定排序键. -k1,1暗示开始排序key1并结束它key1. -k3,3n暗示开始排序key3并结束它key3; n这里表示数字排序,即根据字符串数值进行比较.

默认情况下,sort将空白转换为非空白转换作为字段分隔符.因此,它认为该行bar b 1包括三个字段.如果值由空格以外的特定字符分隔,例如:,您可以通过添加来指定字段分隔符-t:.