sorting - VIM 中的字母数字排序

标签 sorting vim alphanumeric

假设我在文本文件中有一个列表,如下 -

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

如果我使用命令 %sort 在 vi​​m 中排序,它会给我输出 -

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 中做其他事情。

最佳答案

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.

尝试这个命令:

sor n

并且您不需要%,如果未给出范围,则排序会对所有行进行排序。

编辑

正如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*$/

编辑2

对于新编辑的问题,此行可能会根据示例数据为您提供预期输出:

sor nr /\d*$/|sor n

关于sorting - VIM 中的字母数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611045/

相关文章:

在 Dask 中排序

macos - 提交时如何在 vim 中获得 git diff 着色?

php - 将基数 10 转换为基数 62 (a-zA-Z0-9)

objective-c - 将快速排序方法转换为 objective-c

python - 在 Python 中按子字符串对字符串进行排序

php - array_multisort - 不对我的完整表格进行排序

vim - 在 vimscript 中创建目录

Vim 为特定代码段设置高亮

ruby - 如何在 ruby​​ 中对字母数字数组进行排序

xslt - 如何在 XSLT 中应用字母数字排序