oeasy教您玩轉vim - 54 - # 匹配替換

查詢細節

回憶上節課內容

我們學習了替換 substitude

替換單行:s/shiyanlou/oeasy

加上range:3,5s/shiyanlou/oeasy:%s/shiyanlou/oeasy

加上flag:3,5s/shiyanlou/oeasy/g 多個替換:3,5s/shiyanlou/oeasy/gc 多個替換且逐個確認

替換還是很方便的

但是我想替換中使用正則表示式

可以麼?

先回憶一下正則表示式模式匹配

模式 - 列舉字元

[abcd] 表示匹配方括號中列舉的任意一個 字元abcd 中的任意一個字元

[a-z]可用 中劃線-` 表示字元範圍來減少列舉的[a-d] 等價於 [abcd]

[^abcd]表示匹配除方括號中字元以外的任意字元除了 abcd 之外的任意字元模式 - 常用符號

。等價於 [^\n]除了換行符 ( \n ) 以外,表示匹配任意一個字元

\l 等價於 [a-z]表示匹配 任意一個小寫字母意思是lowercase

\L 等價於 [^a-z]表示匹配 任意一個除小寫字母外的其他字元

\u 等價於 [A-Z]表示匹配 任意一個大寫字母意思是uppercase

\U等價於 [^A-Z]表示匹配 任意一個除大寫字母外的其他字元

\w等價於 [0-9A-Za-z_]表示匹配 任意一個字母、數字、下劃線

\W等價於 [^0-9A-Za-z_]表示匹配 任意一個字元除了字母、數字、下劃線。

\d等價於 [0-9]表示匹配 任意一個數字

\D 等價於 [^0-9]表示匹配 任意一個除數字外的其他字元

\x等價於 [0-9A-Fa-f]表示匹配 任意一個十六進位制數字

\X等價於 [^0-9A-Fa-f]表示匹配 任意一個除十六進位制數字外的其他字元

\s 包括兩種分隔符空格 和 tab

幫助手冊

oeasy教您玩轉vim - 54 - # 匹配替換

起止標記

然後我們明確一下起止標記^ 表示匹配 輸入字串的開始位置 (行首)。$ 表示匹配 輸入字串的結束位置 (行尾)。

- \< 表示匹配 單詞詞首。\> 表示匹配 單詞詞尾。

對應單詞

:%s/four/4/g把所有的four替換為4

但是同時twenty-four被替換為twenty-4

這不合理

我們需要`:%s/\/4/g\匹配獨立的four這樣替換就合理了

單詞匹配

如果我們要替換所有的以a開頭d結尾的單詞不允許在詞中進行替換oeasy:%s/\/oeasy/g

add、and 被替換

band 不被替換

刪除空行

首先我們找到空行 /^$

從開頭 ^ 到結尾 $ 中間沒東西

找到了以後,我們來替換%s/^$//這並不能刪除刪完了之後空行還是存在

我們可以使用g命令:g/^$/d

如果開頭結尾之間有空格怎麼辦?/^\s*$ 先找到匹配\s表示空格和tab*表示0-任意多個空格或者tab:g/^\s*$/d

跳脫字元

如果我們要刪除所有//開頭的行這個/需要轉義先搜尋/^//。*$

:%s/^\/\/。*$//g刪除了註釋內容但是但空行還在

:g/^\/\/。*$/d刪除了空行但是開頭有空格和tab的無法刪除

:g/^\s*\/\/。*$/d把 \\ 前面有空格和tab的也刪除了

總結

進行了模式匹配批次替換的的操作

替換單詞:%s/\/oeasy/g

跳脫字元%s/^\/\/。*$/d

刪除空行:g/^\s*$//d

刪除註釋行:g/^\s*\/\/。*$/d

替換還有一些什麼玩法嗎?

下次再說

[Github地址] (https://github。com/overmind1980/oeasyvim)

[Gitee地址] (https://gitee。com/overmind1980/oeasyvim)

[藍橋實驗樓 邀請碼FJWYIMGB] (https://www。lanqiao。cn/courses/2840)