背景
Vim 大部分命令默认只作用于当前行,只有 :write 命令和 :global 命令默认作用于文件所有行 (原创自Vim教程网(https://vimjc.com))。
但很多 Vim 命令都可以加一个行号数字(用于指定某一行)或一对通过 , 或 ; 分割的行号来指明文件范围,扩大命令操作范围。
使用方法
Vim 操作范围的表示方法为:
. 表示当前行,
$ 表示结束/行尾,
% 表示所有行,
n,m 表示第n到m行;
再加上+ 和 -,可灵活表示当前 Vim 打开文件的任意范围。
范例
以删除命令 :d 为例,通过增加 Vim 文件范围,可修改删除命令的操作对象。
Vim命令 操作范围
:d 当前行
:.d 当前行
:1d 第一行
:$d 最后一行
:1,$d 所有行
:%d 所有行
:.,5d 当前行至第 5 行
:,5d 当前行至第 5 行
:,+3d 当前行及接下来的 3 行
:1,+3d 第一行至当前行再加 3 行
:,-3d 当前行及向上的 3 行
:3,'xdelete 第三行至标注 为 x 的那一行
:/^foo/,$delete 当前行以下,以字符 “foo” 开头的那一行至结尾
:/^foo/+1,$delete 当前行以下,以字符 “foo” 开头的那一行的下一行至结尾
除了 , 外,; 也可以分割行号用于表示 Vim 操作范围。
区别在于,a,+b 的 b 是以当前行作为参考,而 a;+b 的 b 是以 a 行作为参考。
例如,假设当前光标所在为第 5 行,:1,+1d 命令会删除第 1 行至第 6 (5+1) 行,而 :1;+1d 命令则会删除第 1 行和第 2 (1+1) 行。