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

veh*_*zzz 42 sorting vim

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

sdfsdg
dfgdfg

34     12
2      4
45     1
34     5
Run Code Online (Sandbox Code Playgroud)

如何对第二列进行排序?

P S*_*ved 49

如果您有可用的shell,请选择您的号码并运行命令

:'<,'>!sort -n -k 2
Run Code Online (Sandbox Code Playgroud)

如果您要在可视模式下键入此内容,则在键入冒号后,标记'<,'>将自动显示,您只需键入其余部分即可.

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

:h filter
Run Code Online (Sandbox Code Playgroud)

  • 这是一个可视模式命令 - Pavel用`V`选择一个范围,然后键入`:`,它会自动插入视觉选择范围`'<,'>`,然后键入实际命令`!sort -n - k 2` 你当然可以用任何方式指定范围 - 如果你很好奇,请参阅`:help range`. (4认同)

msc*_*t42 36

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

:sort /.*\%2v/ 
Run Code Online (Sandbox Code Playgroud)

参考: vimtips.txt

  • 哇,vim有内部排序程序!这个混蛋有多大?! (7认同)

Max*_*Kim 19

对于vim7,我会选择:

:sort n /.*\s/
Run Code Online (Sandbox Code Playgroud)

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


T.T*_*dua 19

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

!sort
Run Code Online (Sandbox Code Playgroud)

或按第三栏排序

sort -k 3 
Run Code Online (Sandbox Code Playgroud)

要么

:sort /.*\%3v/
Run Code Online (Sandbox Code Playgroud)

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

!sort -k 3n
Run Code Online (Sandbox Code Playgroud)

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

:%sort /^\S\+\s\+\S\+\s\+/ 
Run Code Online (Sandbox Code Playgroud)

或者按第8行排序:

:sort /.*\%55v/
Run Code Online (Sandbox Code Playgroud)

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

所以按最后一列排序:

:%sort /\<\S\+\>$/ r
Run Code Online (Sandbox Code Playgroud)