第五部分 模式
第 12 章 按模式匹配及按原义匹配
-
调整查找模式的大小写敏感性
① 全局调整
-
ignorecase
选项打开后,Vim的查找模式将不区分大小写- 副作用:影响Vim关键字自动补全的行为。
-
smartcase
选项打开后,只要输入一个大写字母,查找方式就会变成区分大小写的,换言之,全是小写字母的模式表示忽略大小写 -
ignorecase
和smartcase
同时启用时,smartcase
占主动,即Foo
会匹配不了foo
② 局部强制调整
- 每次查找时,可以通过在任意位置加入
\c
元字符表示忽略大小写,\C
元字符表示区分大小写 - 会覆盖全局调整
-
-
原义搜索 & 正则查找
①
magic
搜索模式 &very magic
搜索模式body { color: #3c3c3c; } a { color: #0000EE; } strong { color: #000; }
- 示例:要搜索上面代码中的颜色代码
magic
搜索模式:/#\([0-9a-fA-F]\{6}\|[0-9a-fA-F]\{3}\)
- 方括号缺省具有特殊含义,因此不用转义。
- 圆括号会按原义匹配字符
(
及)
,因此需要转义,且无论开闭括号都必须转义,使其具有特殊含义。 - 花括号也一样需要转义,不过,我们只需为开括号转义,而与之对应的闭括号则不用,因为Vim会推测我们的意图。
very magic
搜索模式:/\v#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})
- 使用
\v
模式开关将会激活very magic
搜索模式,即假定除_
、字母
以及数字
外的所有字符都具有特殊含义,所以各种括号不用再转义 - 用十六进制字符类进一步优化:
/\v#(\x{6}|\x{3})
,其中\x = [0-9a-fA-F]
#
是个特例啊,他虽然不属于[_a-zA-Z0-9]
,但是它不具有特殊含义,因此时按照原义进行匹配的
- 使用
②
nomagic
搜索模式nomagic
模式下和magic
模式基本一致,只是符号^
与$
代表开头和结尾- 我们可以通过
\m
与\M
开关,来分别使能magic
和nomagic
这两种语法
③
very nomagic
搜索模式- 即原义搜索,使用
\V
开启,开启后其后的模式只有反斜杠有特殊的意义,其他的都会按照原义匹配,最为直观
③ 四种模式之间的关系
- Vim 缺省使用
magic
搜索模式,magic模式的设计初衷,是想能更容易地构造简单的正则表达式,它会自动为某些额外的符号赋予特殊含义,例如:.
(匹配任意一个字符)、*
(前面的字符可以出现0到多次)以及[]
。但它却没能为诸如+
、?
、()
以及{}
等符号赋予特殊含义,这些符号还必须经过转义才具有特殊含义。 very magic
搜索模式弥补了magic
搜索模式的不足,除了[_a-zA-Z0-9]
外,它为所有符号都赋予了特殊含义。这样一来,既好记又恰好与Perl
正则表达式的规则保持一致,因此可以认为这是个正则表达式模式nomagic
模式用于模拟 vi 的行为,只是为^
和$
赋予了开头和结尾的特殊含义very nomagic
模式是最直观的方式,除了\
其他符号都没有特殊含义,都直接匹配原文- 作为通用法则,vim默认是需要打很多转义符号的 magic 模式;如果想按正则表达式查找,就用模式开关
\v
—— very magic 搜索模式;而如果你想按原义查找文本,就使用very nomagic模式;需要用到开头和结尾匹配的时候就用\M
—— nomagic搜索模式,只不过此模式下还是需要特别多的转义
- 示例:要搜索上面代码中的颜色代码
-
圆括号
① 使用圆括号捕获子匹配
-
当我们指定一个模式时,可以捕获其子匹配,并在其他地方引用它们。此功能与substitute命令组合起来尤为好用,但它也可用于定义某一类模式,这类模式的特点是重复包含某个单词。
-
/\v<(\w+)\_s+\1>
专门用来匹配重复单词- ⭐️ 任何圆括号内部的匹配文本都会被自动保存到一个临时的仓库。可以
-