Vim 正则表达式的使用

Vim 的搜索功能是在普通模式下输入 / 开始的, 并且 Vim 的搜索默认用正则表达式. 所以掌握正则表达式和正则表达式在 Vim 中的用法对于提升 Vim 体验极其重要. Vim 的正则表达式帮助可以从:h usr_27 或 :h regexp获得(善用帮助).

Vim 包含两个正则表达式引擎:

  1. 老式的基于回溯的引擎, 支持所有功能.
  2. 新式的 NFA 引擎, 对某些模式会快很多, 但不支持所有功能.

Vim 会自动为你选择合适的引擎, 不过, 如果遇到了问题或者想特别指定某一个引擎, 可以在模式开头处加入:

\%#=0 强制自动选择

\%#=1 强制使用旧引擎

\%#=2 强制使用 NFA 引擎

通常我们不需要关心正则表达式引擎, 甚至不用过多关注正则表达式语法, 只管在/后面输入文本搜索即可. 但下面的知识对提高效率非常有效.

正则表达式基本语法

表达式含义
a|b匹配 a 或 b
gr(a|e)y匹配 gray或 grey,同时()起捕获分组作用
.匹配任一字符
[abc]匹配任一字符: a 或 b 或 c
[^abc]匹配任一字符, 但不包括 a, b, c
[a-z]匹配从 a 到 z 之间的任一字符
[a-zA-Z]匹配从 a 到 z, 及从 A 到 Z 之间的任一字符
^匹配行首
$匹配行尾
*匹配前一项内容 0 次或多次
?匹配前一项内容 0 次或 1 次
+匹配前一项内容 1 次或多次
{n}匹配前一项内容 n 次
{n,}匹配前一项内容 n 次或多次
{n,m}匹配前一项内容次数介于 n 和 m 之间

正则表达式在 Vim 中

Vim 的正则表达式与主流的正则表达式基本一致, 对于熟悉 Python, .Net, Perl(额)语言的同学在用 Vim 的时候肯定会很亲切. 但是毕竟有些不同.

一般正则表达式Vim 正则表达式含义
\\\分隔可选分支
()\(\)分组, 组成单个匹配源
{}\{}指定匹配次数
{}\{-n,m}指定匹配次数, 但是尽可能少
..匹配任一字符
*\*匹配前一项内容 0 次或多次
?\?匹配前一项内容 0 次或 1 次
?\=匹配前一项内容 0 次或 1 次
+\+匹配前一项内容 1 次或多次

记住了上面 Vim 特有的写法, 再去写搜索表达式就很简单自然了.

Vim中与正则表达式有关的设置项

  • magic : 这个选项控制了Vim 正则表达式的行为, 比如上面的|, (), {}都需要在前面加\ . 关于 magic 的帮助请看:h magic
  • \m : 用在表达式的开头, 如同设置了magic选项
  • \M : 用在表达式的开头, 如同设置了magic选项
  • \v : 'very magic', 会使除0-9a-zA-z_ 以外的字符都解释为特殊字符, 在这个选项的控制下, vim 正则表达式的语法就特别像本文最开始提到的正则表达式基本语法. 值得一试.
  • \V : 'evry nomagic', 会使只有反斜杠具有特殊含义, 其他字符都是字面字符. 这样基本上就把正则表达式关闭了.
  • \C : 大小写敏感
  • \c : 大小写不敏感

 

这个最管用

 

\v : 'very magic', 会使除0-9a-zA-z_ 以外的字符都解释为特殊字符, 在这个选项的控制下, vim 正则表达式的语法就特别像本文最开始提到的正则表达式基本语法. 值得一试.

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值