使用 Vim 6.0。假设我正在编辑这个文件:
sdfsdg
dfgdfg
34 12
2 4
45 1
34 5
如何对第二列进行排序?
如果您有可靠的shell,请选择您的数字并运行命令。
:'<,'>!sort -n -k 2
如果你在可视模式下输入这个命令,那么在你输入冒号后,标记符号'<,'>将自动出现,然后你只需要继续输入剩余的内容。
这种类型的命令(:[motion]!)被称为过滤。你可以通过查阅vim的帮助来了解更多:
:h filter
V
选择一段范围,然后输入 :
,这会自动插入可视化选择范围 '<,'>
,然后再输入实际命令 !sort -n -k 2
。当然,您可以按照任何方式指定范围 - 如果您感兴趣,请查看 :help range
。 - Cascabel-h
标志按人类可读数字进行排序,以便将最大的文件显示在顶部::'<,'>!sort -hr
- twhitney对于vim7,我会选择:
:sort n /.*\s/
这将对数字进行排序,忽略给定正则表达式匹配的文本。在您的情况下,是第二列。
在可视化模式下按第二列排序(例如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
sort!
命令也不错。 - firedev:%sort /^\(\S\+\s\+\)\{99}/
:sort n
,因为帮助文档中说:“使用 [n] …… 在行中对第一个小数进行排序……” 这不适用于你的情况,但可能适用于其他人的情况。 - Rabarberski