Skip to content

Latest commit

 

History

History
63 lines (40 loc) · 3.35 KB

pattern.md

File metadata and controls

63 lines (40 loc) · 3.35 KB

模式匹配

区分大小写

  • 使用 ignorecase 选项,强制忽略大小写;可以通过 :set noignorecase 来取消强制忽略大小写
  • \c - 同 ignorecase,强制忽略
  • \C - 强制开启大小写匹配
  • smartcase 选项,如果匹配模式中全为小写,则忽略大小写;但是如果匹配模式中有任意一个大写字母,则会强制开启大小写匹配

界定单词边界

在不对单词进行边界界定时,在查找时 Vim 会命中所有包含要查找字符的单词。例如,there their they 都包含 the,所以如果不进行单词边界界定的话,在查找时会命中前面全部三个单词。在 very mode 模式中,可以使用 <> 进行单词界定,用来标示匹配的开始和结束位置。

查找光标所在的单词

  • * - 正向查找,会界定单词边界,即严格匹配,不会进行贪婪匹配
  • # - 同 *,只不过为反向查找
  • g* - 同 *,只不过不会界定单词边界,会进行贪婪匹配
  • g# - 同 #,不会界定单词边界,会进行贪婪匹配

\v

在 Vim 中,默认开启的正则匹配模式是 magic 模式,其本意是简化正则匹配规则,但是在实现的道路上跑偏了,最终半途而废,导致只有一部分符号有特殊含义,另外的符号没有特殊含义;且没有什么规则,导致不好记忆,最终的结果就是一点都不 magic。在 magic 模式中,.*[] 等有特殊含义,而 ?+(){} 等没有特殊含义,要想像其他的正则一样使用这些特殊符号,则需要使用 \\ 进行转义,导致使用起来非常不方便。所以这里推荐使用 very magic 模式。

在 very magic 模式中,把字母、数字和下划线 _ 之外的所有字符都当作特殊字符来对待,且赋予这些特殊字符特殊的匹配规则或者含义。这样就非常方便记忆:只需要记住没有特殊意义的字符,其他都是特殊字符。

在匹配模式中,通过是用 \v 来开启 very magic 模式:

/\v[0-9]{3}

上面的匹配模式中,通过 \v 开启 very magic 模式,[0-9] 标示允许的字符范围,{3} 标示匹配三个数字。

very magic 模式使得使用正则表达式匹配变得非常容易,不需要使用很多转义字符 \\ 来对默认的非特殊字符进行转义来使用其特殊含义。

\V

在使用中可以通过 \v 开启 very magic 模式使得正则匹配变得非常容易,但是有时候我们会有另外的需求:使用原义匹配,关闭字符的特殊含义,只使用字符的原义,例如:

/https://example.com?query=//

如果我们要对上面的 url 进行匹配的话,为了匹配完整的 url,把特殊字符去掉,我们需要像下面这样写:

/https:\/\/example.com\?query=\/\/

会多出来很多转义符,这时就可以考虑使用原义模式:

/\Vhttps://example.com?query=//

在匹配模式中使用 \V 时,除了转义符 \\ 之外,其他符号都没有特殊含义,只安其字面进行匹配。

在日常的使用中,推荐使用 very magic 模式和原义模式,这两种模式可以覆盖绝大部分的使用需求。基本上 magic 模式提供的功能,very magic 都可以满足,且实现的更好。

Author 🐏