vector 排序_VIM学习笔记 文本排序(sort)

Vim内置了针对文本进行排序的:sort命令。你可以使用:help :sort命令,查看详细的帮助信息。

请注意,Vim内置的sort命令与Linux系统下的!sort命令并非完全一致。

文本行排序

使用以下命令,可以针对指定行范围内的文本进行排序:

:3,16sort

如下图所示,将第3至16行内的CSS属性进行排序:

6fb2414e4f6e029a7dbd9d7a42687108.png

在可视化模式下选中文本,然后执行以下命令可以对选择的文本进行排序:

:'<,'>sort

使用以下命令,将在排序时去除重复的行。对于重复的多行,将仅仅保留第一行,而其它的行将被删除。

:%sort u

使用以下命令,可以针对所有文本进行倒序排序:

:%sort!

使用以下命令,将按照数字进行排序:

:%sort n

组合以上命令,则可以按照数字倒序排序:

:%sort! n

99dbef326e046a067d282575b2f4d6ad.png

文本块排序

假设我们需要对以下文本进行排序。其中,每个条目是被“.KS”和“.KE”包围的文本块;而其定义的每个术语则是以“.IP”开头的多行文字。

11c0f658494396ca4b9cfc9c7b520943.png

如果我们希望按术语进行排序,那么可以通过合并行将文本块整合为一个整体,然后进行排序;稍后再重新拆分行,来恢复原有的文本格式。具体步骤如下:

1)将换行符替换为“@@”字符:

:g/^.KS/,/^.KE/-1s/$/@@/

.KS@@
.IP "TTY_ARGV" 2n@@
The command, specified as an argument vector,@@
that the TTY subwindow executes.@@
.KE
.KS@@
.IP "ICON_IMAGE" 2n@@
Sets or gets the remote image for icon's image.@@
.KE
.KS@@
.IP "XV_LABEL" 2n@@
Specifies a frame's header or an icon's label.@@
.KE
.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.
.KE
.KS
.IP "SERVER_SYNC" 2n
Synchronizes with the server once.
Does not set synchronous mode.
.KE
.KS
.IP "TTY_ARGV" 2n
The command, specified as an argument vector,
that the TTY subwindow executes.
.KE
.KS
.IP "XV_LABEL" 2n
Specifies a frame's header or an icon's label.
.KE

通过以上全局替换命令和排序命令,对文档中的特定术语进行了排序,而且保持格式不变。请注意:

  • 为了缩短实例文字的长度,我们使用“...”来表示省略的文字;
  • 在第2步使用j命令合并行时,自动新增了一个空格;所以在第3步的替换命令中,需要查找“@@”字符以及紧随其后的一个空格;
  • 第4步命令中的“^M”,是使用Ctrl-V和Ctrl-M键输入的;如果Ctrl-V键已经被占用,那么可以使用Ctrl-Q键来替代。

Ver: 2.0 | YYQ<上一篇 | 目录 | 下一篇>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值