:make
使其易于构建和修复错误,并且:grep
和:vimgrep
的行为类似于:make
。但是,为什么需要这两个命令?为什么不只搜索模式并按n
?与仅搜索相比,它们的优点是什么? #1 楼
正如文档所说:Vim has two ways to find matches for a pattern: Internal and external.
简而言之,
:vimgrep
使用Vim的grep机制来读取和查找文件。 :grep
使用外部命令来完成相同的工作。/
搜索仅针对当前缓冲区,而:[vim]grep
搜索整个文件模式,使您可以一次搜索整个项目。 br /> 有关更多信息,请查看
:h grep
。#2 楼
/?
仅搜索当前缓冲区,而:grep
和:vimgrep
则将任意文件/模式/全局变量作为参数。#3 楼
:[vim]grep
优于/?
的一个好处是,结果被放入快速修复列表(或位置列表(如果使用:l[vim]grep
)),这意味着您可以使用:cl
拉出所有匹配项的列表。然后,您可以使用数字直接从列表中找到所需的结果。这也意味着您可以使用与搜索整个代码库
:[vim]grep pattern %
相同的命令来搜索当前缓冲区:[vim]grep pattern path
因此,它具有一些很好的对称性。此外,您可以扩展并使用Silver Surfer / Ripgrep为您提供非常强大的搜索功能。这些可以映射到
:[vim]grep
命令。#4 楼
我看到了3个主要优点使用一致的
regex
引擎/语法:使用:grep/vimgrep
可以定义grepprg
,可以将其定义为grep/ack/ag
等。当前缓冲区或多个缓冲区/文件,使用一致的regex
引擎。另一方面,如果您使用vim的/pattern
选项,则会陷入vim的默认正则表达式引擎中,该引擎的语法与extended regular expression
语法不同。因此,无论何时您必须搜索表达式,都必须考虑/记住您应该使用\)
还是仅使用)
和其他差异。这可能很烦人(https://stackoverflow.com/questions/3864467/whats-the-difference-between-vim-regex-and-normal-regex)vimgrep会填充一个快速修复程序/位置列表:使用
:grep/vimgrep
可以填充搜索列表。 (https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d)。如果要使用位置列表,可以使用
]q
快捷方式如果您有Tim-Popes不受损害的插件(https://github.com/tpope/vim-unimpaired),请浏览它在vim中进行复杂的搜索:通常,如果您必须这样做复杂的搜索可能需要使用命令行。但是,如果正确定义
greprg
并使用诸如[1] :vim / pattern1 /
find . -type f
之类的命令,则可以执行非常复杂的搜索并显示搜索结果在您的
location list
或quickfix list
中。 [1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/