VIM学习笔记 文本排序(sort)
Vim内置了针对文本进行排序的
:sort
命令。你可以使用
:help :sort
命令,查看详细的帮助信息。
请注意,Vim内置的sort命令与Linux系统下的 !sort 命令并非完全一致。
文本行排序
使用以下命令,可以针对指定行范围内的文本进行排序:
:3,16sort
如下图所示,将第3至16行内的CSS属性进行排序:
在可视化模式下选中文本,然后执行以下命令可以对选择的文本进行排序:
:'<,'>sort
使用以下命令,将在排序时去除重复的行。对于重复的多行,将仅仅保留第一行,而其它的行将被删除。
:%sort u
使用以下命令,可以针对所有文本进行倒序排序:
:%sort!
使用以下命令,将按照数字进行排序:
:%sort n
组合以上命令,则可以按照数字倒序排序:
:%sort! n
文本块排序
假设我们需要对以下文本进行排序。其中,每个条目是被“.KS”和“.KE”包围的文本块;而其定义的每个术语则是以“.IP”开头的多行文字。
如果我们希望按术语进行排序,那么可以通过合并行将文本块整合为一个整体,然后进行排序;稍后再重新拆分行,来恢复原有的文本格式。具体步骤如下:
1)将换行符替换为“@@”字符:
:g/^\.KS/,/^\.KE/-1s/$/@@/
.KS@@
.IP "TTY_ARGV" 2n@@
The command, specified as an argument vector,@@
that the TTY subwindow executes.@@
.KS@@
.IP "ICON_IMAGE" 2n@@
Sets or gets the remote image for icon's image.@@
.KS@@
.IP "XV_LABEL" 2n@@
Specifies a frame's header or an icon's label.@@
.KS@@
.IP "SERVER_SYNC" 2n@@
Synchronizes with the server once.@@
Does not set synchronous mode.@@
.KE
2)以“.KS”和“.KE”作为首尾标记来合并行:
:g/^\.KS/,/^\.KE/j
.KS@@ .IP "TTY_ARGV" 2n@@ The ... vector,@@ ... .@@ .KE
.KS@@ .IP "ICON_IMAGE" 2n@@ Sets or gets ... image.@@ .KE
.KS@@ .IP "XV_LABEL" 2n@@ Specifies a ... an icon's label.@@ .KE
.KS@@ .IP "SERVER_SYNC" 2n@@ Synchronizes with ... mode.@@ .KE
3)对文本排序:
:%sort
.KS@@ .IP "ICON_IMAGE" 2n@@ Sets or gets ... image.@@ .KE
.KS@@ .IP "SERVER_SYNC" 2n@@ Synchronizes with ... mode.@@ .KE
.KS@@ .IP "TTY_ARGV" 2n@@ The ... vector,@@ ... .@@ .KE
.KS@@ .IP "XV_LABEL" 2n@@ Specifies a ... an icon's label.@@ .KE
4)将“@@ ”字符重新替换为换行符,以恢复原有格式:
:%s/@@ /^M/g
.KS
.IP "ICON_IMAGE" 2n
Sets or gets the remote image for icon's image.
.IP "SERVER_SYNC" 2n
Synchronizes with the server once.
Does not set synchronous mode.
.IP "TTY_ARGV" 2n
The command, specified as an argument vector,