在Vim中打开与特定模式匹配的所有文件

14

我当前在~/src目录,可以通过执行git grep _pattern_命令获取所有匹配该pattern*.cpp*.hpp文件列表。

现在我想遍历所有匹配该pattern的文件并对它们进行编辑。那么我该如何在Vim中实现呢?(基本上,我希望Vim能够像git grep一样遍历我的目录,并跳转到正确的文件)


1
似乎与以下内容重复:https://dev59.com/9XI-5IYBdhLWcg3wtaxq 和 https://dev59.com/g3NA5IYBdhLWcg3wF5uO。 - Luc Hermitte
相关链接:https://dev59.com/TXA75IYBdhLWcg3wGlIa - Ciro Santilli OurBigBook.com
5个回答

19
您可以使用单引号(也是Unix shell的一个特性),例如:
vim `git grep --name-only <your expression>`

14
大多数人称它们为反引号(backticks);) - matpie
11
同意,这确实是术语的严重滥用。 - Josh Lee
1
你应该更倾向于使用$(command)语法而不是反引号\command``语法。前者更清晰且可嵌套,而后者在涉及引号和撇号时会变得混乱,并且无法嵌套。 - Matt

10

在bash中,你可以这样做

vim $(grep -l _pattern_ *.cpp *.hpp)

但那是bash的特性,不是vim的特性。


6
您可以使用args ex命令:
:args *.cpp *.hpp

这将打开当前目录中的所有cpp和hpp文件。

您也可以使用任何可用于:grep的文件路径扩展。


3

通过正确使用快速修复列表,您甚至可以立即跳转到正确的行(使用:help quickfix命令,例如:cn:cw)。因此,如果您正在使用bash或zsh:

vim -q <(git grep foo)

2
你可以设置grepprg和grepformat选项以运行git grep...并解释结果。这样,你就可以运行命令:grep并将结果读入快速修复缓冲区-有关更多信息,请参见:h quickfix。然后,你可以使用:cnext和:cprev或:copen逐步查看它们,或者在文件列表上放置光标并按回车键打开该文件进行编辑。
与Zoran和ammoQ的建议相比,这种方法的优点是,在你想编辑它们之前,它不会将文件加载到内存中。他们的建议将可能将大量文件一次性加载到内存中,这可能非常难以管理。它还是跨平台的,所以应该可以在Windows上工作,无需使用第三方shell,如cygwin bash。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接