oeasy教您玩轉(zhuǎn)vim - 54 - # 匹配替換
查找細(xì)節(jié)
回憶上節(jié)課內(nèi)容??
我們學(xué)習(xí)了
替換
substitude
替換單行
:s/shiyanlou/oeasy
加上
range
:3,5s/shiyanlou/oeasy
:%s/shiyanlou/oeasy
加上
flag
:3,5s/shiyanlou/oeasy/g
多個(gè)替換:3,5s/shiyanlou/oeasy/gc
多個(gè)替換且逐個(gè)確認(rèn)替換還是很方便的
但是我想替換中使用正則表達(dá)式
可以么???
先回憶一下正則表達(dá)式模式匹配
模式 - 列舉字符
[abcd]
表示匹配方括號(hào)中列舉的
任意一個(gè) 字符
abcd 中的任意一個(gè)字符
[a-z]
可用
中劃線-
` 表示字符范圍來(lái)減少列舉的[a-d]
等價(jià)于[abcd]
[^abcd]
模式 - 常用符號(hào)
表示匹配除方括號(hào)中字符以外的任意字符
除了
abcd
之外的任意字符.
等價(jià)于
[^\n]
除了換行符
( \n )
以外,表示匹配任意一個(gè)字符\l
等價(jià)于
[a-z]
表示匹配 任意一個(gè)
小寫字母
意思是lowercase
\L
等價(jià)于
[^a-z]
表示匹配 任意一個(gè)
除小寫字母外的其他字符
\u
等價(jià)于
[A-Z]
表示匹配 任意一個(gè)
大寫字母
意思是uppercase
\U
等價(jià)于
[^A-Z]
表示匹配
任意一個(gè)除大寫字母外的其他字符
\w
等價(jià)于
[0-9A-Za-z_]
表示匹配
任意一個(gè)字母、數(shù)字、下劃線
\W
等價(jià)于
[^0-9A-Za-z_]
表示匹配
任意一個(gè)字符除了字母、數(shù)字、下劃線。
\d
等價(jià)于
[0-9]
表示匹配
任意一個(gè)數(shù)字
\D
等價(jià)于
[^0-9]
表示匹配
任意一個(gè)除數(shù)字外的其他字符
\x
等價(jià)于
[0-9A-Fa-f]
表示匹配
任意一個(gè)十六進(jìn)制數(shù)字
\X
等價(jià)于
[^0-9A-Fa-f]
表示匹配
任意一個(gè)除十六進(jìn)制數(shù)字外的其他字符
\s
包括兩種
分隔符
空格
和tab
幫助手冊(cè)

起止標(biāo)記
然后我們明確一下起止標(biāo)記
^
? ? ? ? ? ? ? ?表示匹配 輸入字符串的開始位置 (行首)。$ ?
? ? ? ? ? ? ?表示匹配 輸入字符串的結(jié)束位置 (行尾)。
?-\< ?
? ? ? ? ? ?表示匹配 單詞詞首。\> ?
? ? ? ? ? 表示匹配 單詞詞尾。
對(duì)應(yīng)單詞
:%s/four/4/g
把所有的
four
替換為4
但是同時(shí)
twenty-four
被替換為
twenty-4
這不合理
我們需要`:%s/\<four\>/4/g
\<four\>
匹配獨(dú)立的four
這樣替換就合理了
單詞匹配
如果我們要替換所有的以
a
開頭d
結(jié)尾的單詞不允許在詞中進(jìn)行替換
oeasy
:%s/\<a.*d\>/oeasy/g
add
、and
被替換band
不被替換
刪除空行
首先我們找到空行
/^$
從開頭
^
到結(jié)尾$
中間沒(méi)東西找到了以后,我們來(lái)替換
%s/^$//
這并不能刪除刪完了之后空行還是存在
我們可以使用
g
命令:g/^$/d
如果開頭結(jié)尾之間有空格怎么辦?
/^\s*$
先找到匹配\s表示空格和tab
*表示0-任意多個(gè)空格或者tab
:g/^\s*$/d
轉(zhuǎn)義字符
如果我們要?jiǎng)h除所有
//
開頭的行這個(gè)
/
需要轉(zhuǎn)義先搜索/^//.*$
:%s/^\/\/.*$//g
刪除了注釋內(nèi)容
但是但空行還在
:g/^\/\/.*$/d
刪除了空行
但是開頭有空格和tab的無(wú)法刪除
:g/^\s*\/\/.*$/d
把
\\
前面有空格和tab的也刪除了
總結(jié)
進(jìn)行了模式匹配批量替換的的操作
替換單詞
:%s/\<a.*d\>/oeasy/g
轉(zhuǎn)義字符
%s/^\/\/.*$/d
刪除空行
:g/^\s*$//d
刪除注釋行
:g/^\s*\/\/.*$/d
替換還有一些什么玩法嗎???
下次再說(shuō) *
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[藍(lán)橋?qū)嶒?yàn)樓 邀請(qǐng)碼FJWYIMGB] (https://www.lanqiao.cn/courses/2840)