在上一章中的第九部分,我们介绍了全文定位跳转。
只不过只定位了开头和结尾而已。
快捷键分别是:
gg
G
之后我们又介绍了定位跳转任意行的方法,例如:
77G
1000G
接下来,我们来更进一步,介绍任意词的定位与跳转。
一、搜寻
1、查找
说到任意词的定位,估计大家就已经想到了,其实就是最最常见的搜索功能。
比如我们要在vim中搜索:galipy
/galipy
在普通模式中,按下正斜杠(/),然后输入要搜索的内容回车就可以了。
之后按下字母n,就可以查看其他匹配的项了。
这是正向匹配,也就是说,它只会从光标处往下寻找。
但若是想从光标处向上匹配,应该如何操作?
答:
?galipy
用问号(?)就是反向匹配。
你会发现,正斜杠和问号其实是在同一个键位上。
有没有熟悉的感觉?
以前我们进行单词间移动,用字母小w;而反向移动,用字母大W,同样是相同键位~
那么,思考下,当我们正向匹配galipy,按n向下查找,如果我们想向回查找应该怎么办?
2、精准匹配
我们用上面的方法匹配并不精准。
比如我输入:
/galipy
我想匹配galipy,但是,匹配的结果只要包含galipy就都会显示出来。
比如,可能有:
galipy
galipython
thegalipy
thegalipython
那么如何精准匹配呢?
这里用到了两个特殊记号:
\< #表示:首匹配
\> #表示:尾匹配
这两个是什么意思呢?
其实很好理解。
一个表示匹配结果开头完全相同,一个表示匹配结果结尾完全相同。
以上面提到的匹配结果为例:
1、如果输入:
/\<galipy
则会得到:
galipy
galipython
2、如果输入:
/galipy\>
则会得到:
galipy
thegalipy
3、如果输入:
/\<galipy\>
猜猜看会得到什么结果?
(注:这是最精确匹配)
答案:你只会得到galipy
3、魔法匹配
这个名字是我瞎起的,只是因为这个匹配方法比较好用,所以就起了一个这样的名字。
我们每次想精确匹配时,都要输入一堆字符才能完成操作,有没有相对简单一点的精确匹配呢?
答案是:有!
不过他有一个前提条件:那就是,你的光标必须停留在相同字符串上。
其实就是查找有没有其他相同单词的功能。
操作很简单,在普通模式下,把光标移动到相应单词上,然后输入:
*
是的,就只输入一个星号,他就能查找相同项目了。
例如,你把光标停留在galipy上(任意字母上即可),然后按下星号,
他其实是执行了如下操作:
/\<galipy\>
明白了吗?
星号是从光标处开始向下查询,那么向上查询呢?
你可能会说,按住shift。
这次不同之前了。因为你输入星号时本身就按着shift啊!所以只好换一个键位了。
即:
#
4、模糊匹配
模糊匹配其实涉及到正则表达式了。所以我们不讲太多。以后再单独讲解正则表达式。
我们在搜索时,并不是每次都100%确定自己要找的是什么。比如,我们想搜索galipy,但是我们不记得中间的字母是 i 还是 e 了。
怎么办?此时就需要用到模糊匹配了,也就是正则表达式的技巧。
注意看下面的搜索操作和之前有什么不同:
/gal.py
我们把不确定的地方用小数点(.)代替了。
明白了吗?
虽然匹配的结果可能有很多,比如:
galipy
galepy
galapy
但总比你瞎写强。
所以以后有不清楚的地方,就用小数点(.)代替就好了。
那么如果我想查找小数点(.)怎么办?
如果有编程语言基础的同学,应该很容易想到吧~
这里就当思考题了~
5、拓展:行尾行首匹配
这是个特殊的匹配,大家只要知道就好。
/^galipy #字符^,表示:行首匹配,也就是说必须开头是galipy才能匹配到,有空格都不行。
/galipy$ #字符$,表示:行尾匹配,必须是galipy结尾,有空格都不行。
/^galipy$ #完全匹配,这一行只有galipy这几个字符才可以,有空格都不行。
不多讲,可以自行实验:p
二、跳转
说完了搜索,我们来说说跳转。
我们首先要明白跳转和光标移动是两个概念。
最开始我们接触的kjhl都只是单纯的移动光标,一般都发生在一行内;
但是跳转不同,跳转多是跨越多行的行为。
比如上面说到的搜索操作,我们很少说用搜索操作去匹配第二行的相同内容。一般都是一下不知道跳转到哪里去了对不对?
仔细体会这二者的区别~
三、标记
m表示mark,即标记的意思。
我们常用m操作标记一些重要段落,并用a~z加以区分。
比如我们在vim文档开头按下ms表示mark start;中间按下mm表示mark middle;结尾按下me表示mark end。具体用哪个字母表示什么意思完全看心情~
之后,我们就可以通过 ' 单引号操作任意跳转了。
's #跳转到s标记处
'm #跳转到m标记处
'e #跳转到e标记处
并且系统还为我们默认了一处标记,叫做上一处标记,区分符号是 ' ,没错,就是单引号本身。。
'' #跳回上一处
'' #再跳回去
'' #再跳回去
如果你想查看自己都进行了哪些标记,可以在普通模式下输入如下操作:
:marks
大家可以试试看,你会发现,系统默认标记还有其他几个,自己研究研究,看看他们都是什么~
四、拓展
除了通过单引号索引标记跳转外,还有一种索引跳转方法:
历史记录跳转法
主要通过两个快捷键跳转:
ctrl + o #字母o是old的缩写,看到单词应该就知道什么意思了吧。
ctrl + i #字母i并不是什么的缩写,据说只是因为它在字母o的旁边。。。
可以自己实验一下。
我截取文档相关部分来帮助大家理解:
首先是执行几次跳转,之后尝试快捷键回跳。
| example text ^ |
33G | example text | CTRL-O | CTRL-I
| example text | |
V line 33 text ^ V
| example text | |
/^The | example text | CTRL-O | CTRL-I
V There you are | V
example text
如果想查看自己进行了那些跳转命令,可以输入:
:jumps
多多练习哟~