最近使用vim的搜索替换, 发现只是不够用,特意学习了下。
vim中有个·magic·的东西
当然快速查看帮助: help magic
1 2 3 4
| magic (\m):除了$ . * ^ 之外其他元字符都要加反斜杠。 nomagic (\M):除了 $ ^ 之外其他元字符都要加反斜杠。 very magic (\v):都必须加上反斜杠 very nomagic (\V):都不加反斜杠
|
help中拿过来的例子:
1 2 3 4 5 6 7 8 9 10 11 12
| $ $ $ \$ 匹配行尾 . . \. \. 匹配任何字符 * * \* \* 前面匹配原的任意次重复 () \(\) \(\) \(\) 组成为单个匹配原 | \| \| \| 分隔可选分支 \a \a \a \a 字母字符 \\ \\ \\ \\ 反斜杠 (按本义) \. \. . . 英文句号 (按本义) \{ { { { '{' (按本义) a a a a 'a' (按本义)
|
默认设置的 magic
一些常用的量词, 元字符
这些量词,元字符需要自己记下。没办法,👐
量词:
1 2 3 4 5 6 7 8
| * 匹配0个或多个(匹配优先) \+ 匹配1个或多个(匹配优先) \?或\= 0个或1个(匹配优先),\?不能在 ? 命令(逆向查找)中使用 \{n,m} 匹配n个到m个(匹配优先),如\d{1, 3}可以匹配1到3个数字,类似1, 12, 123 \{n,} 最少n个(匹配优先) \{,m} 最多m个(匹配优先 \{n} 恰好n个
|
元字符:
1 2 3 4 5 6 7 8 9 10 11 12 13
| * 匹配任意一个字符 [abc] 匹配方括号中的1个字 [a-zA-Z0-9] 匹配所有大小写字母和数字 [^abc] 不匹配方括号中字符 \d 匹配数字 [0-9] \D 匹配非数字 [^0-9] \x 匹配16进制字符[0-9A-Fa-f] \w 匹配单个字符[a-zA-Z0-9] \W 匹配非单个字符 [^a-zA-Z0-9] \t 下写字符 [a-z] \L 非小写字符[^a-z] \u 大写字符 [A-Z] \U 非大写的字符[^A-Z]
|
一些实用的例子
查找替换 :%s/luo/wen/g
全局把luo替换成wen :%s/luo/wen/gc
替换前每次询问
反向应用demo :%s/\(luo\) or \(wen\)/\2 or \1/
将luo 和wen 相互交换
贪婪和非贪婪
1 2 3 4 5 6 7
| demo: luowenoh
`:%s/\(l.\{-}o\)/hello(\1)/g` => hello(luo)wenoh
`:%s/\(l.*o\)/hello(\1)/g` => hello(luoweno)h
|