本来是要写substitute的, 然后发现range功能太过于强大, 并且很多地方都要使用,
所以本文写range, 写下本文也是为自己梳理一下,
本文的主要内容主要来自官方文档加上自己的理解, 如果想看官方文档请在Vim中执行:h [range]
range
[range]代表替换作用的范围
下面我将范围分成单行和多行
单行
{number}行号为number的那一行.光标当前行(默认)$最后一行'tmarkt(小写的mark) 所在 的那一行'TmarkT(大写的mark) 所在 的那一行 (如果在markT不在本文件不会生效)/{pattern}[/]当前光标向下匹配{pattern}的那一行?{pattern}[?]当前光标向上匹配{pattern}的那一行\/向下搜索你上一搜索的内容 的那一行\?向上搜索你上一搜索的内容 的那一行\&向下搜索你上一次替换中的{pattern}的那一行
多行
%整个文件, 相当于1,$
注: 如果向下搜索指的并不单单是从当前光标到底部, 而是光标到底部(不包含光标那一行)和顶部到光标(包含光标那一行)
加减号
在上面的单行范围中我们又可以在后面加上数字来指定一个偏移
e.g..+1 就代表向下偏移一行.-1 就代表向上偏移一行/findsomething/+3 找到findsomething那行再往下偏移3行
逗号和分号
{n1},{n2} 表示的范围就是n1到n2(包括)
e.g.1,3 表示第一行到第三行(包括)
1,/find/ 表示从第一行到 从光标开始找find的那一行
所以,的执行是这样的: 先执行n1找到行号, 再执行n2找出行号, 就是之间的范围
;和,为唯一的区别是;会先移动光标到;左边的行号, 再去执行,
这就导致了开始找的范围不一样
所以;的执行是这样的: 先执行n1找到行号, 将光标移动到n1, 再执行n2
//
{n1}//{n2} 先找n1在从n1那行开始找n2