什么时候在vim中使用:grep和:vimgrep?


17

在vim中:make,可以轻松构建和修复错误,:grep并且:vimgrep行为类似于:make。但是,为什么需要这两个命令?为什么不只是搜索图案并按一下n?与仅搜索相比,它们的优点是什么?

Answers:


17

正如文档所说:

Vim has two ways to find matches for a pattern: Internal and external.

简而言之,:vimgrep使用Vim的grep机制读取和查找文件。:grep使用外部命令来完成相同的工作。

/搜索是针对当前缓冲区只,而:[vim]grep通过文件的方式进行搜索,让您在整个项目一次搜索。

请查看:h grep更多信息。


4

/?仅搜索当前缓冲区,但:grep:vimgrep采取任意文件/模式/水珠作为参数。


4

:[vim]grepover的一个好处/?是,结果将被放入quickfix列表(或位置列表,如果使用的话:l[vim]grep),这意味着您可以使用来拉出所有匹配项的列表:cl。然后,您可以使用数字直接从列表中转到所需的结果。

这也意味着您可以使用与:[vim]grep pattern %搜索整个代码库相同的命令来搜索当前缓冲区,:[vim]grep pattern path因此它具有一些很好的对称性。

此外,您可以分支并使用Silver Surfer / Ripgrep为您提供非常强大的搜索。这些可以映射到:[vim]grep命令。


0

我看到3个主要优点

  1. 使用一致的regex引擎/语法:使用:grep/vimgrep允许您定义一个grepprg,可以将其定义为grep/ack/agetc。使用此引擎,您可以使用一致的regex引擎搜索当前缓冲区或多个缓冲区/文件。另一方面,如果您使用vim的/pattern选项,则会陷入vim的默认正则表达式引擎中,该引擎的语法与extended regular expression语法不同。因此,无论何时您必须搜索表达式,都必须考虑/记住您应该使用\)还是正义)和其他差异。这可能非常烦人(/programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex

  2. vimgrep填充快速修复程序/位置列表:使用:grep/vimgrep可以填充搜索列表。(https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d)。

    如果您确实想使用位置列表,]q如果您有Tim-Popes不受损害的插件(https://github.com/tpope/vim-unimpaired),则可以使用快捷方式进行导航。

  3. 在vim中进行复杂的搜索:通常,如果必须进行复杂的搜索,则可能必须使用命令行。但是,如果定义greprg正确并使用诸如[1]之类的命令

    :vim / pattern1 / find . -type f

    您可以进行非常复杂的搜索,并在location list或中显示搜索结果quickfix list

[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.