记性不好,才一段时间不用发现vim 的东西忘的差不多了。要重新熟悉才行。现从正则表达式开始,用惯了Java 和Python 的正则表达式,再用Linux 的正则表达式还真有点不习惯,而且grep 和vim 的正则表达式有些微区别,grep 和egrep 的正则表达式也有一点区别。用用之前要好好想想才行,太恶心了。
今天现把VIM 的正则表达式整理一些,过几天整理grep 的。(补充:grep的正则表达式在元字符方面和vi差不多,不整理了)
vim 的正则表达式的有两种模式,magic 和nomagic ,两种模式下,元字符是不一样的。可以通过set mogic 和set nomagic 进行选择,默认是magic 。建议不要乱设置,就用magic 模式差不多。也可以再Pattern 指定用magic 和nomagic ,这里不废话了,下面列出常用的magic 的表达式。
对前一个模式的次数匹配
\*
0 到多次,尽可能多匹配
\+
1 到多次,尽可能多匹配
\=
0 到1 次,尽可能多匹配
\?
0 到1 次,尽可能多匹配
\{n,m}
n 到m 词,尽可能多匹配
\{n}
n 次,尽可能多匹配
\{n,}
至少n 次,尽可能多匹配
\{,m}
0 到m 次,尽可能多匹配
\{}
0 到多次,尽可能多匹配(和\* 一样)
\{-n,m}
n 到m 次,尽可能少匹配
\{-n}
n 次
\{-n,}
至少n 次,尽可能少匹配
\{-,m}
至多m 次,尽可能少匹配
\{-}
0 到多次,尽可能少匹配
位置匹配
^
行开头
\_^
行开头
$
行末尾
\_$
行末尾
.
换行之外的任何字符
\_.
单个字符,包括换行符
\<
单词开始
\>
单词结束
\%^
文件开头
\%$
文件结束
\%V
可视化区域内部
\%#
光标位置
\%'m
标记点m,m 可以自己定义的标记点( 使用'm)
\%nl
匹配第n 行,n 是一个数字
\%nc
匹配第n 列,n 是一个数字
常用预定义字符
\i
标识符字符,如字母数字下划线等
\I
和\i 相似,但不包括数字
\f
文件名字符
\F
类似\f ,但不包括数字
\p
可打印字符
\P
类似\p ,但不包括数字
\s
空白字符
\S
非空白字符
\d
数字[0-9]
\D
非数字[^0-9]
\x
16 进制字符[0-9a-fA-F]
\X
非16 进制字符
\o
八进制字符[0-7]
\O
非八进制字符
\w
字母[a-zA-Z_0-9]
\W
非字母
\h
单词开头字符,比\w 少了数字
\H
非单词开头字符
\a
字母表字符[a-zA-Z]
\A
非字母表字符
\l
小写字母
\L
非小写字母
\u
大写字母
\U
非大写字符
\_x
X 是上面字符中的一个,\_x 比\x 多匹配一个换行符
\t
<Tab>
\n
换行符
\1 \2 \3
第n 个捕获的组\(\)
其他
\(\)
组捕获
\%(\)
非捕获组,和\(\) 类似,但不捕获
\|
分支
相关资源:敏捷开发V1.0.pptx
