在上一章中的第九部分,我們介紹了全文定位跳轉(zhuǎn)敢艰。
只不過只定位了開頭和結(jié)尾而已诬乞。
快捷鍵分別是:
gg
G
之后我們又介紹了定位跳轉(zhuǎn)任意行的方法,例如:
77G
1000G
接下來钠导,我們來更進一步震嫉,介紹任意詞的定位與跳轉(zhuǎn)。
一牡属、搜尋
1票堵、查找
說到任意詞的定位,估計大家就已經(jīng)想到了逮栅,其實就是最最常見的搜索功能悴势。
比如我們要在vim中搜索:galipy
/galipy
在普通模式中,按下正斜杠(/)措伐,然后輸入要搜索的內(nèi)容回車就可以了特纤。
之后按下字母n,就可以查看其他匹配的項了侥加。
這是正向匹配捧存,也就是說,它只會從光標處往下尋找。
但若是想從光標處向上匹配昔穴,應(yīng)該如何操作镰官?
答:
?galipy
用問號(?)就是反向匹配傻咖。
你會發(fā)現(xiàn)朋魔,正斜杠和問號其實是在同一個鍵位上。
有沒有熟悉的感覺卿操?
以前我們進行單詞間移動警检,用字母小w;而反向移動害淤,用字母大W扇雕,同樣是相同鍵位~
那么,思考下窥摄,當我們正向匹配galipy镶奉,按n向下查找,如果我們想向回查找應(yīng)該怎么辦崭放?
2哨苛、精準匹配
我們用上面的方法匹配并不精準。
比如我輸入:
/galipy
我想匹配galipy币砂,但是建峭,匹配的結(jié)果只要包含galipy就都會顯示出來。
比如决摧,可能有:
galipy
galipython
thegalipy
thegalipython
那么如何精準匹配呢亿蒸?
這里用到了兩個特殊記號:
\< #表示:首匹配
\> #表示:尾匹配
這兩個是什么意思呢?
其實很好理解掌桩。
一個表示匹配結(jié)果開頭完全相同边锁,一個表示匹配結(jié)果結(jié)尾完全相同。
以上面提到的匹配結(jié)果為例:
1波岛、如果輸入:
/\<galipy
則會得到:
galipy
galipython
2茅坛、如果輸入:
/galipy\>
則會得到:
galipy
thegalipy
3、如果輸入:
/\<galipy\>
猜猜看會得到什么結(jié)果则拷?
(注:這是最精確匹配)
答案:你只會得到galipy
3灰蛙、魔法匹配
這個名字是我瞎起的,只是因為這個匹配方法比較好用隔躲,所以就起了一個這樣的名字摩梧。
我們每次想精確匹配時,都要輸入一堆字符才能完成操作宣旱,有沒有相對簡單一點的精確匹配呢仅父?
答案是:有!
不過他有一個前提條件:那就是,你的光標必須停留在相同字符串上笙纤。
其實就是查找有沒有其他相同單詞的功能耗溜。
操作很簡單,在普通模式下省容,把光標移動到相應(yīng)單詞上抖拴,然后輸入:
*
是的,就只輸入一個星號腥椒,他就能查找相同項目了阿宅。
例如,你把光標停留在galipy上(任意字母上即可)笼蛛,然后按下星號洒放,
他其實是執(zhí)行了如下操作:
/\<galipy\>
明白了嗎?
星號是從光標處開始向下查詢滨砍,那么向上查詢呢往湿?
你可能會說,按住shift惋戏。
這次不同之前了领追。因為你輸入星號時本身就按著shift啊响逢!所以只好換一個鍵位了蔓腐。
即:
#
4、模糊匹配
模糊匹配其實涉及到正則表達式了龄句。所以我們不講太多。以后再單獨講解正則表達式散罕。
我們在搜索時分歇,并不是每次都100%確定自己要找的是什么。比如欧漱,我們想搜索galipy职抡,但是我們不記得中間的字母是 i 還是 e 了。
怎么辦误甚?此時就需要用到模糊匹配了缚甩,也就是正則表達式的技巧。
注意看下面的搜索操作和之前有什么不同:
/gal.py
我們把不確定的地方用小數(shù)點(.)代替了窑邦。
明白了嗎擅威?
雖然匹配的結(jié)果可能有很多,比如:
galipy
galepy
galapy
但總比你瞎寫強冈钦。
所以以后有不清楚的地方郊丛,就用小數(shù)點(.)代替就好了。
那么如果我想查找小數(shù)點(.)怎么辦?
如果有編程語言基礎(chǔ)的同學(xué)厉熟,應(yīng)該很容易想到吧~
這里就當思考題了~
5导盅、拓展:行尾行首匹配
這是個特殊的匹配,大家只要知道就好揍瑟。
/^galipy #字符^,表示:行首匹配白翻,也就是說必須開頭是galipy才能匹配到,有空格都不行绢片。
/galipy$ #字符$,表示:行尾匹配滤馍,必須是galipy結(jié)尾,有空格都不行。
/^galipy$ #完全匹配杉畜,這一行只有g(shù)alipy這幾個字符才可以纪蜒,有空格都不行。
不多講此叠,可以自行實驗:p
二纯续、跳轉(zhuǎn)
說完了搜索,我們來說說跳轉(zhuǎn)灭袁。
我們首先要明白跳轉(zhuǎn)和光標移動是兩個概念猬错。
最開始我們接觸的kjhl都只是單純的移動光標,一般都發(fā)生在一行內(nèi)茸歧;
但是跳轉(zhuǎn)不同倦炒,跳轉(zhuǎn)多是跨越多行的行為。
比如上面說到的搜索操作软瞎,我們很少說用搜索操作去匹配第二行的相同內(nèi)容逢唤。一般都是一下不知道跳轉(zhuǎn)到哪里去了對不對?
仔細體會這二者的區(qū)別~
三涤浇、標記
m表示mark鳖藕,即標記的意思。
我們常用m操作標記一些重要段落只锭,并用a~z加以區(qū)分著恩。
比如我們在vim文檔開頭按下ms表示mark start;中間按下mm表示mark middle蜻展;結(jié)尾按下me表示mark end喉誊。具體用哪個字母表示什么意思完全看心情~
之后,我們就可以通過 ' 單引號操作任意跳轉(zhuǎn)了纵顾。
's #跳轉(zhuǎn)到s標記處
'm #跳轉(zhuǎn)到m標記處
'e #跳轉(zhuǎn)到e標記處
并且系統(tǒng)還為我們默認了一處標記伍茄,叫做上一處標記,區(qū)分符號是 ' 施逾,沒錯幻林,就是單引號本身贞盯。。
'' #跳回上一處
'' #再跳回去
'' #再跳回去
如果你想查看自己都進行了哪些標記沪饺,可以在普通模式下輸入如下操作:
:marks
大家可以試試看躏敢,你會發(fā)現(xiàn),系統(tǒng)默認標記還有其他幾個整葡,自己研究研究件余,看看他們都是什么~
四、拓展
除了通過單引號索引標記跳轉(zhuǎn)外遭居,還有一種索引跳轉(zhuǎn)方法:
歷史記錄跳轉(zhuǎn)法
主要通過兩個快捷鍵跳轉(zhuǎn):
ctrl + o #字母o是old的縮寫啼器,看到單詞應(yīng)該就知道什么意思了吧。
ctrl + i #字母i并不是什么的縮寫俱萍,據(jù)說只是因為它在字母o的旁邊端壳。。枪蘑。
可以自己實驗一下损谦。
我截取文檔相關(guān)部分來幫助大家理解:
首先是執(zhí)行幾次跳轉(zhuǎn),之后嘗試快捷鍵回跳岳颇。
| 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
如果想查看自己進行了那些跳轉(zhuǎn)命令照捡,可以輸入:
:jumps
多多練習(xí)喲~