我有一张看起来像这样的表:
FirstName SurName;Length;Weight;
我需要对长度进行排序,如果一个或多个名字的长度相等,我需要对重量进行排序。 sort ni
只按长度排序,我也试过sort /.\{-}\ze\dd/
,但这也不起作用。
非常感谢任何帮助!
答案 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位或更多位数。