跟我读vim文档:006_搜寻、跳转、标记

在上一章中的第九部分,我们介绍了全文定位跳转。
只不过只定位了开头和结尾而已。
快捷键分别是:

gg
G

之后我们又介绍了定位跳转任意行的方法,例如:

77G
1000G

接下来,我们来更进一步,介绍任意词的定位与跳转。


一、搜寻

1、查找

说到任意词的定位,估计大家就已经想到了,其实就是最最常见的搜索功能。
比如我们要在vim中搜索:galipy

/galipy

在普通模式中,按下正斜杠(/),然后输入要搜索的内容回车就可以了。
之后按下字母n,就可以查看其他匹配的项了。

这是正向匹配,也就是说,它只会从光标处往下寻找。
但若是想从光标处向上匹配,应该如何操作?
答:

?galipy

用问号(?)就是反向匹配。
你会发现,正斜杠问号其实是在同一个键位上。
有没有熟悉的感觉?
以前我们进行单词间移动,用字母小w;而反向移动,用字母大W,同样是相同键位~

那么,思考下,当我们正向匹配galipy,按n向下查找,如果我们想向回查找应该怎么办?

2、精准匹配

我们用上面的方法匹配并不精准。
比如我输入:

/galipy

我想匹配galipy,但是,匹配的结果只要包含galipy就都会显示出来。
比如,可能有:

galipy
galipython
thegalipy
thegalipython

那么如何精准匹配呢?

这里用到了两个特殊记号:

\<       #表示:首匹配
\>       #表示:尾匹配

这两个是什么意思呢?
其实很好理解。
一个表示匹配结果开头完全相同,一个表示匹配结果结尾完全相同。

以上面提到的匹配结果为例:

1、如果输入:

/\

则会得到:
galipy
galipython

2、如果输入:

/galipy\>

则会得到:
galipy
thegalipy

3、如果输入:

/\

猜猜看会得到什么结果?
(注:这是最精确匹配)

答案:你只会得到galipy

3、魔法匹配

这个名字是我瞎起的,只是因为这个匹配方法比较好用,所以就起了一个这样的名字。

我们每次想精确匹配时,都要输入一堆字符才能完成操作,有没有相对简单一点的精确匹配呢?
答案是:有!

不过他有一个前提条件:那就是,你的光标必须停留在相同字符串上。
其实就是查找有没有其他相同单词的功能。

操作很简单,在普通模式下,把光标移动到相应单词上,然后输入:

*

是的,就只输入一个星号,他就能查找相同项目了。
例如,你把光标停留在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

多多练习哟~

你可能感兴趣的:(跟我读vim文档:006_搜寻、跳转、标记)