Vim:按文本位置对行进行排序

5

我想使用vim的排序命令,从特定位置开始进行排序。 不安装任何插件。

2011-09-17  00:37 |Free|ALL RIGHT NOW
2011-09-17  00:41 |Kim Wilde|CAMBODIA
2011-09-17  00:45 |Take That|NEVER FORGET
2011-09-17  00:53 |Visage|FADE TO GREY
2011-09-17  00:56 |SUTHERLAND BROTHERS & QUIVER|ARMS OF MARY

命令:sort u从位置1开始。

在这个例子中,艺术家的名字从位置20开始,因此我想从那里开始排序。

这是我想要得到的结果。

2011-09-17  00:37 |Free|ALL RIGHT NOW
2011-09-17  00:41 |Kim Wilde|CAMBODIA
2011-09-17  00:56 |SUTHERLAND BROTHERS & QUIVER|ARMS OF MARY
2011-09-17  00:45 |Take That|NEVER FORGET
2011-09-17  00:53 |Visage|FADE TO GREY

这是否可以不使用插件轻松完成,或者不应该尝试? 谷歌搜索出了很多用户自定义脚本,但没有一个可以直接使用的...


1
不一定是第20个位置,但你可以使用外部排序命令。例如::%!sort -t'|' -k2:%!sort -k3 - Sundeep
@Sundeep 是的,但这需要sort命令行工具,而该工具并不适用于每个操作系统。 - 576i
3个回答

7

开箱即用,您可以从虚拟列开始排序

:sort /\%20v/

from :help :sort


2

你可以通过VIM命令跳过行的第一部分(直到“|”字符)进行排序:

:sort /^[^|]*/

这对于示例是有效的,但不要回答第20个位置的问题。(我还计划在具有许多管道或根本没有管道以及固定长度字段的文本上使用它)。如果我采用正则表达式的方式,它可能会使用`.{20}*'来跳过前20个字符,但我无法猜测语法... - 576i
作为后续,尝试使用 :sort /^.{19}/ 没有任何效果。 - 576i
尝试了一些,我必须取消转义{。命令sort /^.\{19\}/可以工作...虽然不是很优雅... - 576i

1
如果您真的想从第20个位置开始排序,请使用以下语法:
:sort /^.\{19}/

注意在开括号前面加上反斜杠,并且要重复的字符必须在量词之前。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接