使用以冒号“:”开头的Ex命令,可以非常高效地处理多行的大段文字。例如使用以下Ex命令进行文本编辑:
命令 | 缩写 | 用途 |
---|---|---|
delete | d | 删除行 |
move | m | 移动行 |
copy | co | 复制行 |
t | 复制行,与co同义 |
Ex命令由行地址和命令组成,并以回车键结束。在Ex命令中,可以使用以下三种方式,来指定命令所影响的行范围:
使用以下命令,可以打印当前文件的第二行内容(到屏幕):
:2p
通过在命令中指定行号范围,可以显示多行内容:
:2,10p
使用以下命令,可以将11至15行移动到23行下面:
:11,15m23
使用以下命令,可以复制23至29行并粘贴到100行下面:
:23,29co100
使用:line delete count形式的命令,即移动到line所指定的行(默认为当前行),然后删除总数为count行的文本(包括line所指定的行在内)。例如,以下命令将删除3至4行(总计两行)文本:
:3 delete 2
在指定行地址时,可以将以下特殊符号与行号组合使用:
.
”,点代表当前行;$
”,美元符号代表最后一行;%
”,百分号代表文件的每一行,等同于1,$的组合;+
”,加号用于增加偏移量;-
”,减号用于减少偏移量。使用以下命令,可以删除最后一行:
:$d
使用以下命令,可以将当前行复制到文件开头:
:.t0
使用以下命令,可以删除从当前行到文件末尾:
:.,$d
使用以下命令,可以删除文件中的所有行:
:1,$d
:%d
使用以下命令,可以把20至当前行的文本移动到文件末尾:
:20,.m$
使用以下命令,可以复制所有行并粘贴到文件的尾部:
:%t$
当符号“+
”和“-
”放置在数字前面时,就会像数学运算符一样,表示加上或减去指定的行数。
使用以下命令,可以删除当前行之前的所有行:
:1,.-1d
使用以下命令,可以删除从当前行到当前行以下20行:
:.,.+20d
使用以下命令,可以把226行到文件末尾的文本移动到当前行的上面两行的后面:
:226,$m.-2
由于当前行是假定的开始位置,因此在使用+或-时并不必需输入圆点符号;如果在+或-后面没有数字,那么就等价于+1和-1;数字0代表文件的开头(即0行)。
使用以下命令,可以复制3行(当前行,前一行,后一行),并粘贴到文件开头:
:-,+t0
使用以下命令,可以删除下一个包含模式pattern的行:
:/pattern/d
使用以下命令,可以删除下一个包含模式pattern的行的下一行:
:/pattern/+d
使用以下命令,可以删除第一个包含pattern1的行与第一个包含pattern2的行之间的所有行:
:/pattern1/,/pattern2/d
使用以下命令,可以从当前行到第一个包含pattern的行之间的文本移动到23行后面:
:.,/pattern/m23
在命令中使用偏移量(offset),可以精确地重置地址定位。例如,以下命令中+1是指匹配行的下一行,-1是指匹配行的上一行:
:/pattern1/+1,/pattern2/-1 delete
在命令中指定行号,将从指定行开始进行查找。例如,以下命令将从第7行开始查找,然后删除匹配行:
:7/pattern/d
假设当前光标在第一行,执行以下命令:
:100,+5p
系统将反馈以下信息,认为终止行位置小于起始行位置:
Backwards range given, OK to swap (y/n)
如果输入“y”,则意味着交换行范围的起止位置,即显示(1+5=)6至100行;如果输入“n”,则行范围(100至6行)无效,命令失败。
如果我们希望将第一个行地址视为“当前行”,那么可以在ex命令中使用分号“;”代替逗号“,”。
不管当前光标处于文件的哪一行,以下命令都将视第100行为当前行,并显示当前行及之后5行(即100至105行):
:100;+5p
分号也可以用于搜索模式的相对地址中。例如,以下命令将显示下一个包含模式pattern的行以及之后的10行:
:/patter/;+10p