Sorting 在vim中对两列进行排序

Sorting 在vim中对两列进行排序,sorting,vim,Sorting,Vim,我有一张像这样的桌子: FirstName SurName;Length;Weight; 姓;长度;重量; 我需要按长度排序,如果一个或多个名字的长度相等,我需要按重量排序sortni仅对长度进行排序,我也尝试了sort/\{-}\ze\dd/这样做,但也不起作用 任何帮助都将不胜感激 尝试使用r标志 按长度排序: :%sort rni /.*;\ze\d/ 按重量分类: :%sort rni /\d+\ze;$/ 如果没有此标志,则会对匹配后的内容执行排序,这可能有点麻烦 使用r标志,排序

我有一张像这样的桌子:

FirstName SurName;Length;Weight; 姓;长度;重量; 我需要按长度排序,如果一个或多个名字的长度相等,我需要按重量排序
sortni
仅对长度进行排序,我也尝试了
sort/\{-}\ze\dd/
这样做,但也不起作用


任何帮助都将不胜感激

尝试使用
r
标志

按长度排序:

:%sort rni /.*;\ze\d/
按重量分类:

:%sort rni /\d+\ze;$/
如果没有此标志,则会对匹配后的内容执行排序,这可能有点麻烦


使用
r
标志,排序在匹配本身上完成,这可能更容易定义。在这里,模式匹配行末尾分号前的一系列1或多个数字。

这可以使用外部(GNU)排序非常直接地完成:

!sort -t ';' -k 2,2n -k 3,3n
这表示:按分号拆分字段,按第二个字段数字排序,然后按第三个字段数字排序。可能比任何你能编出来的vim内部命令更容易阅读和记忆


这里有更多关于GNU排序的信息:

:sort
:%sort
具有相同的效果,只需少敲一次键:)-问题是如何根据长度排序,并且您的正则表达式与权重匹配。当然,关于
:%sort
:sort
,您是对的。但我提出了两个命令:一个用于重量,另一个用于长度。