2013-07-12 21 views
2

假设我有一个文本文件列表,这是如下 -字母排序在VIM

TaskB_115 
TaskB_19 
TaskB_105 
TaskB_13 
TaskB_10 
TaskB_0_A_1 
TaskB_17 
TaskB_114 
TaskB_110 
TaskB_0_A_5 
TaskB_16 
TaskB_12 
TaskB_113 
TaskB_15 
TaskB_103 
TaskB_2 
TaskB_18 
TaskB_106 
TaskB_11 
TaskB_14 
TaskB_104 
TaskB_112 
TaskB_107 
TaskB_0_A_4 
TaskB_102 
TaskB_100 
TaskB_109 
TaskB_101 
TaskB_0_A_2 
TaskB_0_A_3 
TaskB_116 
TaskB_1_A_0 
TaskB_111 
TaskB_108 

如果我有点vim的使用命令%sort,它给了我输出 -

TaskB_0_A_1 
TaskB_0_A_2 
TaskB_0_A_3 
TaskB_0_A_4 
TaskB_0_A_5 
TaskB_10 
TaskB_100 
TaskB_101 
TaskB_102 
TaskB_103 
TaskB_104 
TaskB_105 
TaskB_106 
TaskB_107 
TaskB_108 
TaskB_109 
TaskB_11 
TaskB_110 
TaskB_111 
TaskB_112 
TaskB_113 
TaskB_114 
TaskB_115 
TaskB_116 
TaskB_12 
TaskB_13 
TaskB_14 
TaskB_15 
TaskB_16 
TaskB_17 
TaskB_18 
TaskB_19 
TaskB_1_A_0 
TaskB_2 

但我想有如下输出 -

TaskB_0_A_1 
TaskB_0_A_2 
TaskB_0_A_3 
TaskB_0_A_4 
TaskB_0_A_5 
TaskB_1_A_0 
TaskB_2 
TaskB_10 
TaskB_11 
TaskB_12 
TaskB_13 
TaskB_14 
TaskB_15 
TaskB_16 
TaskB_17 
TaskB_18 
TaskB_19 
TaskB_100 
TaskB_101 
TaskB_102 
TaskB_103 
TaskB_104 
TaskB_105 
TaskB_106 
TaskB_107 
TaskB_108 
TaskB_109 
TaskB_110 
TaskB_111 
TaskB_112 
TaskB_113 
TaskB_114 
TaskB_115 
TaskB_116 

我刚写了这个列表来演示这个问题。我可以在VIM中生成列表。但是我想在VIM中做其他的事情。

回答

4
With [n] sorting is done on the first decimal number 
      in the line (after or inside a {pattern} match). 
      One leading '-' is included in the number. 

试试这个命令:

​​

,你不需要%,排序排序的所有行,如果是没有给出范围。

编辑

由OP评论,如果您有:

TaskB_0_A_1 
TaskB_0_A_2 
TaskB_0_A_4 
TaskB_0_A_3 
TaskB_0_A_5 
TaskB_1_A_0 

你可以尝试:

sor n /.*_\ze\d*/ 

sor nr /\d*$/ 

EDIT2

为新编辑的问题,该行可能会给你预期基于您的示例数据输出:

sor nr /\d*$/|sor n 
+0

哦,是的,我试图像这样'%排序-n'! 我也可以编辑我的问题。假设我有我的名单为 - 'TaskB_0_A_1 TaskB_0_A_2 TaskB_0_A_4 TaskB_0_A_3 TaskB_0_A_5 TaskB_1_A_0 '然后做排序,这是行不通的。你能告诉我,如何实现这个排序,因为'sort n'确实只对第一个十进制数进行排序。 – Raj

+0

@Raj请编辑你的问题。但下次尝试让示例更适合您的实际数据。这可以帮助您更快地获得解决方案,同时还可以节省将提供帮助的人的工作量 – Kent

+0

@Raj在答案中看到编辑。 – Kent