使用Vim 6.0。假设我正在编辑此文件:
sdfsdg
dfgdfg
34 12
2 4
45 1
34 5
如何对第二列进行排序?
答案 0 :(得分:44)
如果你有合适的shell,请选择你的号码并运行命令
:'<,'>!sort -n -k 2
如果你要在视觉模式下输入,输入冒号后,标记'&lt;,'&gt;将自动附加,您只需键入其余部分。
这种类型的命令(:[motion]!)称为过滤。您可以通过咨询vim的帮助了解更多信息:
:h filter
答案 1 :(得分:34)
答案 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}/