如何在Vim中对数字列和文字列进行排序
使用Vim 6.0。假设我正在编辑此文件:如何在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匹配的文本对数字进行排序。在您的情况下,
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}/