星期一, 八月 26, 2019

VIM学习笔记 Ex命令寻址方式(Ex Command-Address)

使用以冒号“:”开头的Ex命令,可以非常高效地处理多行的大段文字。例如使用以下Ex命令进行文本编辑:

命令缩写用途
deleted删除行
movem移动行
copyco复制行
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

使用以下命令,可以删除从当前行到文件末尾:

:.,$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

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

没有评论:

发表评论