7

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

名字姓氏;长度;体重;

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

任何帮助将不胜感激!

4

2 回答 2

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

于 2012-10-30T23:04:47.533 回答
1

r用国旗试试。

按长度排序:

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

按重量排序:

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

如果没有这个标志,则对匹配的内容进行排序,这可能有点麻烦。

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

于 2012-10-30T22:23:26.797 回答