当前位置: 首页 > news >正文

【vim 学习系列文章 15.2 -- vim vimgrep 使用详细介绍】

文章目录

    • vimgrep 使用详细介绍
      • vimgrep 基本用法
      • vimgrep 在当前文件中搜索
      • vimgrep 在多个文件中搜索
      • vimgrep 在递归目录中搜索
      • vimgrep 加载搜索结果到快速修复列表
      • vimgrep 结合映射快捷键使用
      • vimgrep 在整个项目中搜索
      • vimgrep 仅搜索特定类型的文件
      • vimgrep 与 quickfix
      • Summary

vimgrep 使用详细介绍

vimgrep 是 Vim 中的一个强大工具,用于在文件中搜索模式并将匹配项加载到快速修复列表(quickfix list)。你可以使用它来在一个或多个文件中查找特定的模式,然后快速导航到这些匹配项。以下是 vimgrep 的详细介绍及使用示例。

vimgrep 基本用法

:vimgrep /pattern/ [files]
  • pattern:要搜索的正则表达式模式。
  • files:要搜索的文件,可以是一个或多个文件,甚至是通配符表示的文件集。

vimgrep 在当前文件中搜索

假设你要在当前文件中搜索包含 example 这个词的行:

:vimgrep /example/ %
  • % 表示当前文件。

vimgrep 在多个文件中搜索

假设你有多个文件,并且想在这些文件中搜索包含 example 这个词的行。例如,你想在当前目录下的所有 .txt 文件中搜索:

:vimgrep /example/ *.txt

vimgrep 在递归目录中搜索

你也可以在递归目录中搜索。例如,搜索当前目录及其子目录下的所有 .c.h 文件:

:vimgrep /example/ **/*.c **/*.h

vimgrep 加载搜索结果到快速修复列表

vimgrep 的结果会自动加载到快速修复列表中,你可以使用以下命令进行导航:

  • 打开快速修复列表窗口:
    :copen
    
  • 关闭快速修复列表窗口:
    :cclose
    
  • 跳转到下一个匹配项:
    :cnext
    
  • 跳转到上一个匹配项:
    :cprev
    

vimgrep 结合映射快捷键使用

你可以为常用的 vimgrep 操作设置快捷键。例如,为了在当前文件中查找包含光标下单词的行并打开快速修复列表,你可以在 ~/.vimrc 中添加以下映射:

nnoremap <leader>g :execute 'vimgrep /' . expand('<cword>') . '/' . ' %' <bar> copen<CR>

这样,你可以在 Vim 中按 <leader>g(通常是 \g)来执行搜索并打开快速修复列表。

vimgrep 在整个项目中搜索

假设你正在处理一个项目,并且想在项目的所有文件中搜索 function_name,你可以使用以下命令:

:vimgrep /function_name/ **/*

vimgrep 仅搜索特定类型的文件

假设你只想在项目中的 Python 文件中搜索 function_name,可以使用以下命令:

:vimgrep /function_name/ **/*.py

vimgrep 与 quickfix

:vim 搜索在 quickfix 中显示结果,运行搜索命令后,运行 :copen 打开 quickfix 窗口。
这里有一些有用的 quickfix 命令:

:copen        打开快速修复窗口
:cclose       关闭 quickfix 窗口
:cnext        转到下一个位置
:cprevious    转到上一个位置

Summary

vimgrep 是 Vim 中一个非常强大的工具,适用于在一个或多个文件中搜索模式。它将搜索结果加载到快速修复列表中,便于快速导航和查看。通过结合映射和其他 Vim 命令,vimgrep 可以极大地提升你的搜索和编辑效率。

" 示例:在当前文件中搜索 'example' 并打开快速修复列表
:vimgrep /example/ % | copen

通过以上方法,你可以在 Vim 中灵活使用 vimgrep 来满足各种搜索需求。

推荐阅读
https://zhuanlan.zhihu.com/p/597098123

相关文章:

  • WebRTC音视频开发读书笔记(六)
  • Go 语言并发--高级概述
  • 11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai
  • 探索Python的工业通信之光:pymodbus的奇妙之旅
  • STM32时钟树配置
  • linux dig域名DNS 查询与iptables域名ip访问流量限制
  • 元素设置了sticky粘性布局后,关于滚动后怎么样让这个元素自动添加阴影,我用自定义指令实现
  • 4.3 数据操作语言(DML):增删改查操作
  • 牛客网SQL进阶135 :每个6/7级用户活跃情况
  • 【c++】通过Privilege类来保护数据
  • 【layui】layer弹出图片层(开启图片旋转 放大 缩小 还原)
  • PostgreSQL常用命令,启动连接,pg_dump导入导出
  • Python模块篇(五)
  • 2408d,加@GC作为函数属性
  • Java基于数据库、乐观锁、悲观锁、Redis、Zookeeper分布式锁的简单案例实现(保姆级教程)
  • CSS盒模型深入
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • MYSQL 的 IF 函数
  • mysql_config not found
  • node.js
  • PHP CLI应用的调试原理
  • Python3爬取英雄联盟英雄皮肤大图
  • python学习笔记-类对象的信息
  • Redash本地开发环境搭建
  • SAP云平台里Global Account和Sub Account的关系
  • SQLServer之创建数据库快照
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • webpack4 一点通
  • XML已死 ?
  • 给初学者:JavaScript 中数组操作注意点
  • 解析带emoji和链接的聊天系统消息
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 移动端 h5开发相关内容总结(三)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 7行Python代码的人脸识别
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​如何防止网络攻击?
  • ​香农与信息论三大定律
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (C#)一个最简单的链表类
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (TOJ2804)Even? Odd?
  • (附源码)php投票系统 毕业设计 121500
  • (四)库存超卖案例实战——优化redis分布式锁
  • (算法)N皇后问题
  • (一) springboot详细介绍
  • (一)SpringBoot3---尚硅谷总结
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • .form文件_一篇文章学会文件上传
  • .net core Redis 使用有序集合实现延迟队列
  • .NET Core 中的路径问题
  • .Net Core与存储过程(一)
  • .Net 知识杂记