vim内置搜索命令vimgrep, 可以在多个文件里查找关键字。相当于IDE里的关键字搜索功能。

vimgrep命令:

:vim[grep] /pattern/[g][j] files ...
g和j参数都是可选的,:vimgrep命令可以缩写为:vim
g :
不加该选项时,当一行中有多个匹配项时,仅在 quickfix 中添加一行。添加该选项时,每个匹配都在quickfix 列表中添加一项。所以一般不用加/g参数;
j :
不加该选项,查找完毕,光标将跳转到第一个匹配处。添加该选项时,查找完毕,仅更新 quickfix 列表,光标不跳转。所以一般都会加上/j参数;
files :
% 表示在当前缓冲区文件中查找。
*.cpp 表示在当前目录中的 .cpp 文件中搜索。
**/*.cpp 表示在当前目录及子目录中 .cpp 文件中搜索。
**/*.cpp **/*.h 表示在当前目录及子目录中 .cpp、.h 文件中搜索。
当前目录 用 :pwd 命令查看当前目录。用 :cd 命名切换当前目录。
文件可以为多个,中间空格隔开
vimgrep帮助信息::help :vimgrep

一些使用案例:

在当前目录下(不包括子目录)的所有php文件里搜索"keyword", 且不自动跳转到搜索结果:
vimgrep /keyword/j *.php

在当前目录及其子目录下的所有php文件里递归搜索"keyword",且不自动跳转到搜索结果:
vimgrep /keyword/j **/*.php
注意:**表示在当前目录以及子目录递归, 比如**/*.php

在当时目录及其子目录下递归搜索"keyword"
vimgrep /keyword/j **

如果要搜索多个文件扩展名, 用空格分开即可: vimgrep /字符串/j **/*.cpp **/*.php

使用绝对路径, 递归搜索:
vimgrep /字符串/j /home/user/**/*.cpp
vimgrep /字符串/j D:\home\user/**/*.cpp

vim除了使用vimgrep命令进行文本搜索,还可以使用grep命令进行文本搜索。
vimgrep命令使用vim内置的搜索引擎,而grep命令调用外部grep工具实现文本搜索,所以相对速度更快。
grep命令会运行由选项grepprg所指定的程序。在Linux系统上,grepprg默认是grep -n,在Windows系统上,grepprg默认是findstr /n
由此可见,使用vimgrep命令在不同平台上将获得一致的体验。而grep命令则是与操作系统相关的,在不同平台会有不同的行为。所以vimgrep命令兼容性更强。

grep命令

在当前目录下查找所有文件:
:grep block *.*
默认情况下,grep是区分大小写的,可以使用-i选项来忽略大小写:
:grep -i word filename

使用-o选项,将只显示匹配的字符,而不是整行内容:
:grep -o [[:punct:]] filename
grep帮助信息::help :grep
请注意,递归搜索子目录的**/*.*通配符,对于Linux下的:vimgrep和:grep命令有效;但对于Windows下的:grep命令不起作用。

'grepprg’选项

使用以下命令,可以查看’grepprg’选项的当前设置:
:set grepprg?
在不同的操作系统下,Vim将默认使用不同的外部grep工具:
在Windows下
grepprg=findstr /n
在Linux下
grepprg=grep -n $* /dev/null
如果希望默认查询当前目录以及其子目录,那么可以使用以下设置:
在Windows下
set grepprg=findstr /S /n
在Linux下
set grepprg=grep -nR $* /dev/null
请注意,您可以使用:pwd命令来查看当前目录。
如果您在Windows中已经安装了Git或Cygwin,那么只需要在环境变量PATH中增加相应目录,即可调用其自带的grep命令:
C:\Program Files\Git\usr\bin
D:\cygwin64\bin
在Windows命令行中,可以使用以下命令进行验证:$ grep --version
然后在vimrc配置文件中,使用以下设置:
set grepprg=grep\ -rnIH\ --exclude-dir=.git
通过以上设置,可以在Windows环境中使用Linux风格的grep程序。

QuickFix列表窗口

:cw 打开 quickfix 列表窗口,也可用:copen
:ccl 关闭 quickfix 列表窗口,是:cclose的缩写
:cn, :cp:cnext, :cprev的缩写,跳转到quickfix 列表的下 / 上一个匹配处
:cfirst, :clast 跳转到 quickfix 列表的第一项、最后项的匹配处。
每次跳转需要输入命令太麻烦了,可以设置快捷键映射一下:
用 F11 及 Shift-F11 在 quickfix 列表中向后、向前跳转。

:nnoremap <F11>  :cnext<CR>
:nnoremap <S-F11>  :cprev<CR>

lvim[grep] 与 vim[grep] 的区别

lvim 使用窗口的本地列表,vim 使用 quickfix 列表。
lvim 的窗口本地列表跳转命令为::lnext 、 :lprev 、 :lfirst 及 :llast 。
命令除了首字母不同,其余是一样的。(一个是l,一个是c)

:grep:vimgrep命令,都将在QuickFix中显示搜索结果。
:lgrep:lvimgrep命令实现相同的功能,但使用地址列表(Location List)来显示匹配结果。

使用:copen:cw命令打开的Quickfix,是全局性的。而使用:lopen打开的Location List,则是独立存在于各个窗口中的。

对于Quickfix,使用:cp命令,跳转到上一个匹配处;使用:cn命令,跳转到下一个匹配处。

对于Location List,使用:lpre命令,跳转到上一个匹配处;使用:lnext命令,跳转到下一个匹配处。

参考/转载:

  • https://zhuanlan.zhihu.com/p/148280898
  • https://fengliurenwu.blog.csdn.net/article/details/76193550?spm=1001.2101.3001.6650.2&utm_medium=distribute.wap_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-2.wap_blog_relevant_default&depth_1-utm_source=distribute.wap_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-2.wap_blog_relevant_default

vim内置的搜索命令vimgrep使用相关推荐

  1. 教你使用IOS内置的排错命令

    在平常进行网络配置的时候,一般来说除了路由器设备没有别的工具可以让你进行网络的排错,下面就介绍一些路由器内置的命令来进行网络排错,虽然有些命令很基本,但是一些扩展项还是很好玩的. 1.Ping命令 P ...

  2. vim学习六之搜索命令

    目录 Vim基本搜索命令 / 或者? 搜索 n/N 正反向下一个 光标处单词搜索 Vim高亮搜索 搜索大小写敏感 搜索进阶 Vim正则表达式搜索 查找在行首的特定串 查找在行尾的特定串 匹配特定行 V ...

  3. HBuilderX 使用内置终端打开命令框 操作文件

    安装内置终端插件 安装 内置终端插件 随意点击一个文件右击 点击以后如果你没有安装提示你安装 也可以点击工具 插件 进行安装 选择 node npm 运行环境 选择内置终端 npm 路径查询 npm ...

  4. php搜索文件名,window_Windows7内置搜索如何同时搜索文件名与内容,  Win7的搜索功能效果非常强 - phpStudy...

    Windows7内置搜索如何同时搜索文件名与内容 Win7的搜索功能效果非常强大,不但比WinXP快上许多,而且还能即输即显.不过我们在平时使用的时候大家会发现,Win7搜索只能搜索目录中的文件名,却 ...

  5. linux系统中查看gcc内置宏定义的命令方法

    GNU C预定义了一系列的宏,这些宏都是以双下划线开始的 查看内置宏的命令 gcc -dM -E - < /dev/null [qipa250@localhost ~]$ gcc -dM -E ...

  6. 查看命令为内置命令还是外部命令

    查看命令为内置命令还是外部命令---type        有木有 ? 有的用户在用一般用户身份执行ifconfig eth0  会出现"-bash: ifconfig :command n ...

  7. 调用外部程序处理文件_Python使用内置方法、模块调用外部命令

    导读 Python内置调用外部命令: os.system os.popen os.popen2 os.popen3 os.popen4 commands模块 subprocess模块 在Python3 ...

  8. Windows7内置搜索,同时搜索文件名以及文件里面的内容

    http://www.jb51.net/os/windows/283168.html Windows7内置搜索如何同时搜索文件名与内容 Win7的搜索功能效果非常强大,不但比WinXP快上许多,而且还 ...

  9. vim查找关键字_vim常用命令及操作

    [1]光标移动 h 光标左移,同 <Left> 键 j 光标下移,同 <Down> 键 k 光标上移,同 <Up> 键 l 光标上移,同 <Up> 键& ...

最新文章

  1. 激光雷达基础-光探测和测距-遥感
  2. UITests操作指南
  3. 写代码水平的几个发展阶段
  4. C语言怎么输出百分号%
  5. LeetCode 1801. 积压订单中的订单总数(map)
  6. python编写sql注入工具-利用Python实现SQL注入 - Python黑客编程入门系列 - 8
  7. 大数据之-Hadoop之HDFS_HDFS_Shell命令---大数据之hadoop工作笔记0052
  8. 数字全息 matlab,基于MATLAB实现的数字全息实验系统
  9. 28.java中Java8.0的新特性(附讲解和练习)
  10. zzuli:1047对数表
  11. linux怎么查看hwaddr_怎么查询linux centos mac地址
  12. Flixel横板游戏制作教程(八)—MovingPlatforms(移动平台)
  13. 如何一键查询名下所有银行卡?
  14. oppoa9处理器怎么样_oppoa91参数处理器怎么样
  15. 魔方世界服务器文件,魔方世界服务器指令 | 手游网游页游攻略大全
  16. 暴多的教学视频,想要的就快下!
  17. R语言ggplot2优雅的绘制环状云雨图
  18. python123创意绘画_Turtle 创意绘画
  19. 几个javascript框架对比(vue,react,Angular等),如何选择?
  20. 贵州大学计算机历年收分,贵州大学历年分数线 2021贵州大学录取分数线

热门文章

  1. linux中bash有错导致insmod,linux insmod error ko文件
  2. python stdout stderr_使用Python将stdout和stderr重定向到同一文件
  3. 新枫之谷-艾芙特领域任务
  4. 如何简单高效的进行系统维护——延时任务及定时任务
  5. Java 搭建 Selenium 环境
  6. stm32定时器详解
  7. 解决 ORA-00942: table or view does not exist
  8. 期待“灵魂伴侣”会让婚姻受挫?
  9. win7+ubuntu 20.0双系统安装
  10. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)