如何在Vim中对数字列和文字列进行排序

如何在Vim中对数字列和文字列进行排序,vim,sorting,Vim,Sorting,使用Vim 6.0。假设我正在编辑此文件: sdfsdg dfgdfg 34 12 2 4 45 1 34 5 如何对第二列进行排序?如果有合适的shell可用,请选择数字并运行命令 :'<,'>!sort -n -k 2 使用VimSort命令对第二列N上的所有行进行排序,例如 :sort /.*\%2v/ 参考资料:对于vim7,我会选择: :sort n /.*\s/ 这将忽略给定regexp匹配的文本对数字进行排序。在您的情况下,

使用Vim 6.0。假设我正在编辑此文件:

sdfsdg
dfgdfg

34     12
2      4
45     1
34     5

如何对第二列进行排序?

如果有合适的shell可用,请选择数字并运行命令

:'<,'>!sort -n -k 2

使用Vim
Sort
命令对第二列N上的所有行进行排序,例如

:sort /.*\%2v/ 

参考资料:

对于vim7,我会选择:

:sort n /.*\s/

这将忽略给定regexp匹配的文本对数字进行排序。在您的情况下,它是第二列。

通过在视觉模式(例如Control+v)下选择它,按第二列排序,然后运行:

!sort
或按第三列排序

sort -k 3 

或者,使用Shift+V命令选择要排序的行。然后进入

!sort -k 3n
或者使用下面的代码告诉Vim跳过每行中的前两个单词,并根据以下内容进行排序:

:%sort /^\S\+\s\+\S\+\s\+/ 
或按第8行排序:

:sort /.*\%55v/
“虚拟”规范是列的绝对数,它将空格+制表符视为单个字符(简而言之,它不将制表符计算为八个空格)

因此,要按最后一列进行排序:

:%sort /\<\S\+\>$/ r
:%sort/\$/r

如果有更多的列,您可以使用重复来避免复杂的模式。
例如,这将按第100列对整个文件进行排序(“列”在这里表示空格分隔列)


哇,维姆有内部分拣程序!那个混蛋有多大?!有什么原因不能升级吗?vim.org确实说7.2是最新的稳定版本。请举个例子:'这是一个视觉模式命令-Pavel使用
V
选择一个范围,然后键入
,如果您的第二列(或第三列、第四列…)恰好是第一列带有十进制数字,它会自动插入视觉选择范围
',请注意,您可以简单地使用
:sort n
,正如帮助中所说:“使用[n]…对行中的第一个十进制数进行排序…”这不适用于您的情况,但可能适用于其他人。这应该是答案。但是shell
排序也很好。
:sort /.*\%55v/
:%sort /\<\S\+\>$/ r
:%sort /^\(\S\+\s\+\)\{99}/