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

时间:2009-08-30 21:51:28

标签: vim sorting

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

sdfsdg
dfgdfg

34     12
2      4
45     1
34     5

如何对第二列进行排序?

5 个答案:

答案 0 :(得分:44)

如果你有合适的shell,请选择你的号码并运行命令

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

如果你要在视觉模式下输入,输入冒号后,标记'&lt;,'&gt;将自动附加,您只需键入其余部分。

这种类型的命令(:[motion]!)称为过滤。您可以通过咨询vim的帮助了解更多信息:

:h filter

答案 1 :(得分:34)

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

:sort /.*\%2v/ 

参考:vimtips.txt

答案 2 :(得分:17)

对于vim7,我会选择:

:sort n /.*\s/

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

答案 3 :(得分:15)

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

!sort

或按第三栏排序

sort -k 3 

:sort /.*\%3v/

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

!sort -k 3n

或使用以下代码告诉Vim跳过每一行中的前两个单词并对以下内容进行排序:

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

或者按第8行排序:

:sort /.*\%55v/

'virtual'规范是列的绝对数,它将空格+制表符视为单个字符(很快,它不会将制表符视为八个空格),

所以要按最后一栏排序:

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

答案 4 :(得分:0)

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

:%sort /^\(\S\+\s\+\)\{99}/