2009-08-30 231 views
30

使用Vim 6.0。假设我正在编辑此文件:如何对Vim中的数字和文字列进行排序

sdfsdg 
dfgdfg 

34  12 
2  4 
45  1 
34  5 

如何对第二列进行排序?

+1

相关,如果你的第二个(或第三,第四......)列碰巧是第一个带有十进制数的列,请注意,您可以简单地使用':sort n',如帮助所示:“使用[n] ...排序在行中的第一个十进制数上完成。 ..“这不适用于你的情况,但可能对某些人来说。 – Rabarberski 2012-11-16 14:42:20

回答

35

如果你有体面的外壳可供选择你的号码,然后运行命令

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

如果你要去型这在可视化模式,键入冒号后,标志“<”>将自动appead,和你只需要输入其余的内容。

这种类型的命令(:[motion]!)被称为筛选。您可以通过查阅vim的帮助人们了解更多:

:h filter 
+0

这是一个例子:'<,'>!sort -n -k 2? – vehomzzz 2009-08-30 22:18:02

+0

我还收到一个错误:E20:标记未设置 – vehomzzz 2009-08-30 22:20:38

+4

这是一个可视模式命令--Pavel使用'V'来选择一个范围,然后键入':',它会自动插入视觉选择范围''<,'>'然后键入实际的命令'!sort -n -k 2'。您当然可以用任何方式指定范围 - 如果您好奇,请参阅':help range'。 – Cascabel 2009-08-30 23:13:39

29

排序方式使用Vim的sort命令,例如在第二列ň所有行

:sort /.*\%2v/ 

参考:vimtips.txt

+5

哇,vim有内部的排序程序!那个混蛋有多大? – 2009-08-30 22:01:07

+0

在vim 6.0中没有排序命令:( – vehomzzz 2009-08-30 22:05:52

+0

任何你无法升级的原因vim.org确实说7.2是最新的稳定版 – 2009-08-30 22:09:47

15

对于vim7我会去:

:sort n /.*\s/ 

这会忽略的数字给出的正则表达式匹配的文本进行排序。在你的情况下,它是第二列。

11

分类由第二列通过在视觉模式中选择它(例如控制 + v),然后运行:

!sort 

或通过第三列进行排序

sort -k 3 

:sort /.*\%3v/ 

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

!sort -k 3n 

,或者使用下面的代码来告诉Vim跳过前两个单词中的每一行和排序任何如下:

:%sort /^\S\+\s\+\S\+\s\+/ 

或即排序8号线:

:sort /.*\%55v/ 

“虚拟”规范是列的绝对数量,它将空格+制表符视为单个字符(简言之,它不会将制表符计为八个空格),

所以通过最后一列进行排序:

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

这应该是答案。 'sort!'也很好。 – firedev 2014-10-29 12:29:15

相关问题