VIM使用系列:搜索功能


VIM使用系列:搜索功能
 
在VIM中阅读项目源代码时,会频繁地需要对变量、类型定义、函数等进行跳转和搜索,跳转功能可以同过前面介绍的ctag和cscope工具来实现,但对于一些字符串的搜索,就只能依靠VIM的搜索功能了。VIM本身就带有强大的搜索支持功能,除此之外还支持外部的grep搜索工具的使用,这里只对VIM内部的搜索功能进行简单的介绍,主要是自身的使用经验。
 
向前搜索:/{pattern}  或者快捷搜索键  *
需要在当前文件中向前搜索时,有两种方法可以选择,一种是在Normal模式下,在命令行敲搜索命令:/{pattern},其中{pattern}为要搜索的字符串。另一种就是在Normal模式下,将光标移动到待搜索的字符串任意位置,然后按下 * 键(shift+8)。
 
很显然,第二种方法要效率高,也更快,而第一种方法你还需要手动输入一遍搜索字串。在之前的一段时间我还一直是用第一种的方法进行搜索,后来知道了第二种方法,感觉解放了。但是在一些情况下还只能使用/命令的方法进行搜索,*命令是无法实现的,那就是当你要搜索的字符串中有空白字符时。因为*命令的搜索模式是自动确定的,只会选择当前光标下的非空白单词,而/命令的搜索模式是手动指定的,就可以包含有空白字符,依然会被作为一个整体进行搜索。
 
向后搜索:?{pattern} 或者快捷搜索键 #
和向前搜索一样,也有两种方法,一种是命令行:?{pattern};一种是快捷按键 #(shift+3),使用的条件和方法和向前搜索是一致的。
 
继续上一次搜索: 向前 n  向后 N
使用上面的搜索命令执行过一次搜索后,光标会跳到相应方向上的第一个匹配模式上,如果想要继续搜索下一个匹配模式,则可以通过按键 n 或者 N来实现。n:继续向前进行下一次搜索;N: 继续向后进行下一次的搜索。当搜索到文件的底部或者顶部时,vim会自动进行循环搜索,因此很方便,可以无需太过关心搜索方向问题。
 
内部搜索命令::vimgrep 可简写成 :vim
vimgrep命令可以对项目中的所有文件进行指定模式的搜索,和grep工具的功能一致。使用vimgrep命令,必须指定两个参数:搜索模式和搜索文件目标。搜索模式使用vim的模式规则,基本是那些通用的;而搜索文件目标的指定除了指定具体的文件名外,还可以使用通配规则,这个是很有用的。可以使用*来匹配任意字符串,还可以使用 ** 来匹配文件夹树,如:
 
1
:vimgrep /main/gj **/*.c   #递归搜索当前工作目录下所有的.c源文件
2
:vimgrep /main/gj ./*.c    #仅搜索当前工作目录下的.c源文件
vimgrep命令还有两个搜索选项,如上面的例子所示,分别是:g 和 j。选项 g 表示:每一次的匹配结果都显示出来,即global的意思,不加该选项时,一行内的多个匹配结果只会在搜索列表中显示一次。选项 j 表示:搜索结束后是否跳转到第一个匹配结果位置处,即jump的意思,不加 j 选项则自动跳转,而加上该选项,则不跳转,只是更新搜索列表。
vimgrep的搜索结果列表显示使用quickfix列表窗口,系列前面的文章已经对quickfix功能进行了介绍,在使用完vimgrep命令后,如果之前就打开了quickfix窗口,则窗口内容会自动更新为搜索结果列表;如果没有打开,也会更新quickfix列表,但是不会显示,需要手动打开quickfix窗口,然后就可以看到搜索结果了。在搜索结果列表中的跳转和quickfix列表中的使用是一致的。
 
搜索结果高亮显示设置
可以设置是否高亮显示搜索结果,只需要在vimrc配置文件中加上或去掉: set hlsearch 配置语句就可以了。
 
对应的在线帮助
查看搜索相关的在线帮助手册内容: :help /   :help ?  :help vimgrep  :help *  :help #
 

相关内容

    暂无相关文章