热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

VIM使用系列:搜索功能

VIM使用系列:搜索功能在VIM中阅读项目源代码时,会频繁地需要对变量、类型定义、函数等进行跳转和搜索,跳转功能可以同过前面介绍的ctag和cscope工具来实现,但对于一些字符串的搜索,就只能依靠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 #
 

推荐阅读
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文介绍了在MacOS上通过Homebrew安装Anaconda3,并配置环境变量以实现不同Python版本之间的快速切换。同时,提供了详细的步骤来创建和管理多个Python环境。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 利用SSH隧道实现外网对局域网机器的安全访问
    本文探讨了一种常见的网络配置问题及其解决方案,即如何在外网环境下安全地访问位于局域网内的计算机。特别介绍了使用SSH反向隧道技术来实现这一目标的具体步骤和注意事项。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
author-avatar
咖啡Spring_767
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有