oeasy教您玩轉(zhuǎn)vim - 35 - # 正則表達
查找進階
回憶上節(jié)課內(nèi)容??
實時搜索
:set incsearch
大寫小寫
ignorecase
查找當(dāng)前單詞
*正向按單詞
#反向按單詞
g*正向不按單詞
g#反向不按單詞
繼續(xù)查找
n保持方向
N改變方向
這個搜索可以做一些模糊匹配嗎?
應(yīng)該在哪里查詢呢?
模式匹配
:h /
可以找到關(guān)于搜索相關(guān)的幫助我們可以打開
patterns.txt
找到關(guān)于比較簡單的解釋
03.9
的超鏈接位置ctrl+]跳轉(zhuǎn)文檔

行頭行尾

/include
匹配所有的include
^
意味著行開頭/^include
只匹配include
在行頭的/^#
只匹配#
在行頭的$
意味著行結(jié)尾/the.$
只匹配the.
在行尾的/^End$
匹配行頭接著End
,然后就是行尾的一行:g/^$/d
刪除所有空行行頭行尾和詞頭詞尾很像
^
本身就是跳到行頭$
本身就是跳到行尾
任意字符
.
可以匹配任意字符,作為通配符來使用比如
/c.m
第一個字符為
c
第二個字符為
.
就是任意字符第三個字符為
m
可以匹配
company
中的com
也可以匹配
camera
中的cam

任意字符
ter.
匹配ter
后面加一個字符

如果想要正常匹配一個真的
.
.
就不再代表任意字符了比如搜索
/ter\.
就是尋找ter.
就要加上一個反斜杠
\
寫做
\.
使用反斜杠
\
轉(zhuǎn)義之后
更多字符
.
代表任意字符/c.m
匹配c和m中間有一個字符
的情況/c..m
匹配c和m中間有兩個字符
的情況/c...m
匹配c和m中間有三個字符
的情況如果我想查找 c 和 m 中間有任意多個字符怎么辦?
/c.*m
在c
和m
中間出現(xiàn) 0 到任意多個.
(任意字符)如果我希望出現(xiàn)任意多次的是小寫字母怎么辦?
/c[a-z]*m
這樣就是中間出現(xiàn)任意多個[a-z]小寫字母
了使用
*
通配符/a*
意味著出現(xiàn) 0 到任意多個 a:g/^\s*$/d
刪除搜有只有空格和tab的行\s
代表空格和tab

詞頭詞尾
^
和$
分別代表著行頭和行尾再回一下詞頭詞尾
如果我想找出單詞的開頭結(jié)尾是某些字符的怎么辦呢?

-
- `\<` 意味著單詞開頭
?? ?- `\<a` 意味著 `a` 開頭的單詞
- `\>`意味著單詞結(jié)尾
?? ?- `b\>` 意味著 `b` 結(jié)尾的單詞
- `\<a[a-z]*b\>`
?? ?- 意味著以 a 開頭,b 結(jié)尾,ab 之間可能有零到任意多個小寫字符的單詞
搜索歷史
我們使用
*
、#
查找的時候就自動給加上這個詞頭詞尾可以*之后
/
配合上下方向鍵看到
曾經(jīng)的搜索記錄

推薦網(wǎng)站
推薦一個好玩的網(wǎng)站
https://blog.robertelder.org/regular-expression-visualizer/
可以可視化的觀察正則匹配的過程
總結(jié)
行頭行尾
^
意味著行開頭$
意味著行結(jié)尾任意字符
.
代表任意字符[a-z]
代表任意小寫字母字符數(shù)量
*
代表 0 到任意多個前字符+
代表 1 到任意多個前字符?
代表 0 或 1 個前字符行頭行尾
\<
意味著單詞開頭\>
意味著單詞結(jié)尾正則表達式的初步規(guī)則先介紹到這里
我們掌握了在 vi 中光標(biāo)運動的各種方法
但如何編輯文本呢???
下次再說 *
[Github地址] (https://github.com/overmind1980/vimtutorial)
[Gitee地址] (https://gitee.com/overmind1980/vimtutorial)
[藍橋?qū)嶒灅?邀請碼FJWYIMGB] (https://www.lanqiao.cn/courses/2840)