按VIM中垃圾数字后出现的数字对列表进行排序

CRS*_*CRS 5 regex sorting vim

我需要对几个包含1,000个条目的列表进行排序和区分.列表看起来像:

11-2-3049_2007_squib.pdf
11-11-5476_2004_squib.pdf
13-2-5477_2006_squib.pdf
14-3-3045A_2004_squib.pdf
14-CMF-3046_2004_squib.pdf
14-2-3047_2005_squib.pdf
14-4-3048_2004_squib.pdf
15-7-3050P_2004_squib.pdf
Run Code Online (Sandbox Code Playgroud)

我希望按照第二个-和之前的数字排序_,例如3049在第一个例子中.

我无法将列和正则表达式的排序结合起来取得任何成功.你们都建议什么?

seh*_*ehe 8

这应该做的伎俩:

:sort r  /\v^(.{-}-){2}\zs.{-}\ze_/
Run Code Online (Sandbox Code Playgroud)

看到

:help sort
Run Code Online (Sandbox Code Playgroud)

在这里的背景

正则表达式包含一些曲折:

  • \v魔术模式(减少转义的需要)
  • \zs\ze标记实际匹配结果的开始和结束
  • {-}执行非贪婪的kleene-star匹配(用Perl表示法,.{-}将会.*?)