目標 : 把原本的特訂字串變成大寫
輸入範例 :
#define ChipEndAddr_L 0x0197
#define PAGE0 0x0198
希望得到的輸出 :
#define CHIPENDADDR_L 0x0197
#define PAGE0 0x0198
命令如下
%s/#define\s\+\([a-zA-Z0-9_]\+\)/#define\ \U\1/g
解釋
%s 指要搜尋取代的範圍是整個檔案
搜尋的字串以 #define 起頭
接著\s\+ 代表的是 \s 泛指空白的字元例如 tab, space, \+ 指的是出現至少一次
接著出現 用 \( 以及\) 包裹住的代表之後可以存入變數的字串
被\( ... \) 包圍住的是 [a-zA-Z0-9_]\+ 也就是a 到 z, A 到 Z, 0 到 9, 還有底線隨便的字元組合
接著用 / 之後是指要替換的字串, #define 加一個空白
接著 \U 代表的是把之前找到的 \( ... \) 包圍的字串改成大寫, 這個字串用 \1 代表
如果之前在尋找的規則中有兩個以上的 \( ... \) 那數字代碼就是遞增 例如 \2
/g 代表的就是不只替代一行