博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VIM使用系列:搜索功能
阅读量:7087 次
发布时间:2019-06-28

本文共 1662 字,大约阅读时间需要 5 分钟。

hot3.png

在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的模式规则,基本是那些通用的;而搜索文件目标的指定除了指定具体的文件名外,还可以使用通配规则,这个是很有用的。可以使用*来匹配任意字符串,还可以使用 ** 来匹配文件夹树,如:

:vimgrep /main/gj **/*.c   #递归搜索当前工作目录下所有的.c源文件: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 #

转载于:https://my.oschina.net/shelllife/blog/120922

你可能感兴趣的文章
Hibernate问题之'hibernate.dialect' not set
查看>>
8月8日小记
查看>>
u-boot中环境变量的实现
查看>>
Android开发之Button事件实现方法的总结
查看>>
Squid调试和故障处理
查看>>
MIME protocol 说明
查看>>
Google LOGO现代舞舞蹈动画
查看>>
<context:component-scan>配置解析(转)
查看>>
poj 2041 Unreliable Message 字符串处理
查看>>
有人3见解
查看>>
[python]decimal常用操作和需要注意的地方
查看>>
Ubuntu 网卡信息2
查看>>
android 没有main函数,怎么找到程序执行入口呢?以及activity主要生命周期的方法说明...
查看>>
java中处理字符编码(网页与数据库)(转)
查看>>
[leetcode]Path Sum II
查看>>
BZOJ 1806 IOI2007 Miners 矿工配餐 动态规划
查看>>
参考例子,学习Func<T, TResult>委托
查看>>
NTFS For Mac 如何简单操作
查看>>
django 生成复杂的 PDF 文件(数据较多时)
查看>>
CodeForces 300C 最短路
查看>>