一般的编程语言都有正则表达式的功能,对于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>" |
我个人比较喜欢这个方案。因为它把命令和正则分开了,而且兼容其他编程语言。