在vim中的两列上排序

时间:2012-10-30 21:16:20

标签: sorting vim

我有一张看起来像这样的表:

FirstName SurName;Length;Weight;

我需要对长度进行排序,如果一个或多个名字的长度相等,我需要对重量进行排序。 sort ni只按长度排序,我也试过sort /.\{-}\ze\dd/,但这也不起作用。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:7)

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

!sort -t ';' -k 2,2n -k 3,3n

这表示:用分号分割字段,按数字排序第二个字段,然后按数字排序第三个字段。可能比你可以烹饪的任何vim-internal命令更容易阅读和记忆。

有关GNU排序的更多信息:http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

答案 1 :(得分:1)

尝试使用r标记。

按长度排序:

:%sort rni /.*;\ze\d/

按重量排序:

:%sort rni /\d+\ze;$/

如果没有此标志,则会在匹配之后对进行排序,这可能有点麻烦。

使用r标志,对匹配本身进行排序,这可能更容易定义。这里,模式匹配在行尾的分号前面的一系列1位或更多位数。