oeasy教您玩转vim - 35 - # 正则表达
查找进阶
回忆上节课内容🤔
实时搜索
:set incsearch
大写小写
ignorecase
查找当前单词
*正向按单词
#反向按单词
g*正向不按单词
g#反向不按单词
继续查找
n保持方向
N改变方向
这个搜索可以做一些模糊匹配吗?
应该在哪里查询呢?
模式匹配
:h /
可以找到关于搜索相关的帮助我们可以打开
patterns.txt
找到关于比较简单的解释
03.9
的超链接位置ctrl+]跳转文档

行头行尾

/include
匹配所有的include
^
意味着行开头/^include
只匹配include
在行头的/^#
只匹配#
在行头的$
意味着行结尾/the.$
只匹配the.
在行尾的/^End$
匹配行头接着End
,然后就是行尾的一行:g/^$/d
删除所有空行行头行尾和词头词尾很像
^
本身就是跳到行头$
本身就是跳到行尾
任意字符
.
可以匹配任意字符,作为通配符来使用比如
/c.m
第一个字符为
c
第二个字符为
.
就是任意字符第三个字符为
m
可以匹配
company
中的com
也可以匹配
camera
中的cam

任意字符
ter.
匹配ter
后面加一个字符

如果想要正常匹配一个真的
.
.
就不再代表任意字符了比如搜索
/ter\.
就是寻找ter.
就要加上一个反斜杠
\
写做
\.
使用反斜杠
\
转义之后
更多字符
.
代表任意字符/c.m
匹配c和m中间有一个字符
的情况/c..m
匹配c和m中间有两个字符
的情况/c...m
匹配c和m中间有三个字符
的情况如果我想查找 c 和 m 中间有任意多个字符怎么办?
/c.*m
在c
和m
中间出现 0 到任意多个.
(任意字符)如果我希望出现任意多次的是小写字母怎么办?
/c[a-z]*m
这样就是中间出现任意多个[a-z]小写字母
了使用
*
通配符/a*
意味着出现 0 到任意多个 a:g/^\s*$/d
删除搜有只有空格和tab的行\s
代表空格和tab

词头词尾
^
和$
分别代表着行头和行尾再回一下词头词尾
如果我想找出单词的开头结尾是某些字符的怎么办呢?

-
- `\<` 意味着单词开头
- `\<a` 意味着 `a` 开头的单词
- `\>`意味着单词结尾
- `b\>` 意味着 `b` 结尾的单词
- `\<a[a-z]*b\>`
- 意味着以 a 开头,b 结尾,ab 之间可能有零到任意多个小写字符的单词
搜索历史
我们使用
*
、#
查找的时候就自动给加上这个词头词尾可以*之后
/
配合上下方向键看到
曾经的搜索记录

推荐网站
推荐一个好玩的网站
https://blog.robertelder.org/regular-expression-visualizer/
可以可视化的观察正则匹配的过程
总结
行头行尾
^
意味着行开头$
意味着行结尾任意字符
.
代表任意字符[a-z]
代表任意小写字母字符数量
*
代表 0 到任意多个前字符+
代表 1 到任意多个前字符?
代表 0 或 1 个前字符行头行尾
\<
意味着单词开头\>
意味着单词结尾正则表达式的初步规则先介绍到这里
我们掌握了在 vi 中光标运动的各种方法
但如何编辑文本呢?🤪
下次再说 *
[Github地址] (https://github.com/overmind1980/vimtutorial)
[Gitee地址] (https://gitee.com/overmind1980/vimtutorial)
[蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/courses/2840)