正則表達(dá)式:在 Vim 中異于 Javascript 的用法

對(duì)于前后端各種編程語言中的正則表達(dá)式,開發(fā)者們已經(jīng)再熟悉不過了;但如果你在使用 vim 編輯器,同樣會(huì)在命令模式下遇到需要用正則實(shí)現(xiàn)搜索替換的情景。
往往在此時(shí)你會(huì)發(fā)現(xiàn),這里的正則語法和 Javascript 等語言中雖然大部分相同,但還是有些差異,用起來處于一種 “會(huì),但不完全會(huì)” 的奇怪疊加態(tài)。
今天我們就來稍微歸納一下 vim 中較獨(dú)特的正則語法,為更好地使用這種編輯神器厘清障礙。
本文適用于較熟悉正則表達(dá)式和 vim 編輯器的讀者,入門選手推薦先閱讀以下文章:
搜索和替換標(biāo)記
除了 g、i 之外,在 vim 中還可以使用 c,用來交互式地對(duì)匹配項(xiàng)逐個(gè)替換。
比如在命令模式下輸入 :%s/cat/Dog/gc 后回車,會(huì)得到一個(gè) replace with Dog (y/n/a/q/l/^E/^Y)? 的提示,按 y 就表示 yes 替換,按 n 表示 no 跳過等
貪婪模式和懶惰模式
貪婪模式:
*匹配前面的字符 0 次或多次\+匹配前面的字符 1 次或多次\?或\=匹配前面的字符 0 次或 1 次\{number}精確匹配指定次數(shù)\{min,max}匹配前面的字符最少 min 次或最多 max 次
非貪婪模式:
\{-}匹配前面的字符 0 次或多次,比如對(duì)于字符串 'This is a sample text':/h.\{-}s會(huì)匹配到 'his'/h.*s則匹配到 'his is a s'\{-min,max}盡可能少地匹配 min 次到 max 次,也就是滿足條件情況下能 min 盡量不 max
特殊字符
除了常見的 \s、\W 等,vim 中一些獨(dú)特的字符匹配如下:
\a匹配字母,即[a-zA-Z]\A匹配非字母,即[^a-zA-Z]\l匹配小寫字母,即[a-z]\L匹配非小寫字母,即[^a-z]\u匹配大寫字母,即[A-Z]\U匹配非大寫字母,即[^A-Z]\x匹配十六進(jìn)制字符,即[0-9a-fA-F]\X匹配非十六進(jìn)制字符,即[^0-9a-fA-F]
多匹配和捕獲模式
\|可以用來匹配兩個(gè)或更多個(gè)關(guān)鍵詞比如 /abc\|123會(huì)匹配到 'abc' 或 '123'\(pattern\)可以建立捕獲分組,在替換段落中則用\1,\2依次表示捕獲到的分組
單詞邊界
\<pattern匹配單詞的開始邊界pattern\>匹配單詞的結(jié)束邊界\<pattern\>精確匹配整個(gè)單詞
搜索模式調(diào)整符
\v用來簡化限定符、分組等里面的\符號(hào)/\vc{5}精確匹配 'ccccc'/\vabc+匹配 'abc' 或 'abccc'/\vabc?匹配 'ab' 或 'abc'/\v<his>精確匹配整個(gè)單詞 'his'/\vmin|max匹配 'min' 或 'max'/\vhand(y|ful)匹配 'handy' 或 'handful'/\v(\a)\1匹配 'aa' 'bb' 'cc' 等s/\v(\d+) (\d+)/\2 \1/將 '123 99' 替換為 '99 123'\V使得匹配特殊字符時(shí)不用\符號(hào)/V^.*$精確匹配字符串^.\*$\c忽略大小寫搜索\C大小寫敏感搜索\%V只對(duì)可視模式下光標(biāo)選中的范圍進(jìn)行替換s/\%Vcat/dog/g會(huì)把選中范圍內(nèi)的 'cat' 換成 'dog'在可視模式按 ESC 變?yōu)槊钅J綍r(shí),命令輸入行會(huì)自動(dòng)生成 '<,'>,要先刪去這一部分
替換并改變大小寫
在替換段落中,可以使用以下符號(hào)
\u將后面的一個(gè)字符變?yōu)榇髮?/section>:% s/\v(\a+)/\u\1/g會(huì)將文件中的所有英文單詞變?yōu)槭鬃帜复髮?/section>:% s/\v(\w)_(\a+)/\1\u\2/garray_sum變成 'arraySum'\U將后面的所有字符變?yōu)榇髮?/section>:% s/\v(\a+)/\U\1/g會(huì)將文件中的所有英文單詞變?yōu)槿髮?/section>\l將后面的一個(gè)字符變?yōu)樾?/section>\L將后面的所有字符變?yōu)樾?/section>
自定義分隔符
為了避免在搜索替換時(shí)使用過多的 / 所造成的混亂,可以使用諸如 #^$ 這樣的其他符號(hào)替換 /,比如:
:% s#/project/adder/#/verilog/project/high_speed_adder/#g
參考資料
https://learnbyexample.gitbooks.io/vim-reference/content/Regular_Expressions.html
評(píng)論
圖片
表情
