一般的编程语言都有正则表达式的功能,对于Vim这种专门处理文本的编辑器来说,正则就更加重要了。在学习这一章节之前,你最好有一些正则表达式的基础。如果没有,可以参考《Learn Regex the Hard Way》来学。
设置高亮
通过下面这条命令,可以打开Vim的高亮设置。这样我们在搜索文本的时候,匹配的文本背景会用高亮的颜色显示。
1 |
:set hlsearch incsearch |
hlsearch
是控制按下回车之后,匹配的文本背景高亮。
incsearch
是控制实时刷新匹配的文本高亮。
使用正则搜索
在Vim中,向后搜索按下/
,向前搜索按下?
。通常会配合execute
和normal
构造字符串命令来执行搜索。
注意在命令中,像+
这样的正则符号,需要前面加\
进行转义,否则就会解释成字符+
,而不是正则上面的含义(好奇怪,.
符号默认是正则里面的.而不是符号,+
却默认是符号而不是正则)。
而在字符串命令中,转义符号需要先用转义符号将其解释成转义符号,而非符号\
。有些绕,举个例子,+
在字符串命令中的正则含义需要这样表示: \\+
。
纯字符串
上一节中我们讨论过纯字符串,在纯字符串(单引号里面的内容)下,就可以不必使用双反斜杠表示转义了。但是需要注意的是,\<cr>
这样并不能将其转义成回车。因为这里纯字符串不能解释<cr>
。好在,Vim支持字符串拼接。
1 2 3 4 5 |
:execute 'normal! gg/for .\+ in .\+:\<cr>' " 不能工作,因为没有按下回车 :execute "normal! gg" . '/for .\+ in .\+:' . "\<cr>" " 完美解决 |
“魔术时刻”(Very Magic)
太疯狂了是不是,竟然有这么多模式。
如果你对其他语言的正则表达式熟悉的话,可以使用一个叫做Very Magic的模式(就是用\v开头的正则表达式)。
参考这个命令。
1 |
:execute "normal! gg" . '/\vfor .+ in .+:' . "\<cr>" |
我个人比较喜欢这个方案。因为它把命令和正则分开了,而且兼容其他编程语言。