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

在Vim中打开与特定模式匹配的所有文件,vim,grep,Vim,Grep,我在~/src。我可以执行git grep\u模式,并获得与此模式匹配的所有*.cpp或*.hpp文件的列表 现在我想浏览所有与模式匹配的文件并对其进行编辑。如何在Vim中执行此操作?(基本上,我希望Vim像git grep一样浏览我的目录,并跳转到正确的文件。)在bash中,您可以这样做 vim $(grep -l _pattern_ *.cpp *.hpp) 但这是一个bash功能,而不是vim功能。您可以使用单引号(也是一个unix shell功能),类似于: vim `git grep

我在
~/src
。我可以执行
git grep\u模式
,并获得与此模式匹配的所有
*.cpp
*.hpp
文件的列表

现在我想浏览所有与模式匹配的文件并对其进行编辑。如何在Vim中执行此操作?(基本上,我希望Vim像git grep一样浏览我的目录,并跳转到正确的文件。)

在bash中,您可以这样做

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

但这是一个bash功能,而不是vim功能。

您可以使用单引号(也是一个unix shell功能),类似于:

vim `git grep --name-only <your expression>`
vim`git grep--仅限名称`

您可以将grepprg和grepformat选项设置为运行
git grep…
并解释结果。这将允许您运行命令:grep并将结果读入quickfix缓冲区-有关更多信息,请参阅
:hQuickFix
。然后,您可以使用:cnext和:cprev或:copen单步浏览这些文件,以打开一个包含文件列表的单独窗口-将光标放在文件名上,然后按return键将打开该文件进行编辑


与Zoran和ammoQ的建议相比,这种方法的优点是,在您想要编辑文件之前,它不会将文件读入内存。他们的建议可能会同时将数百个文件加载到内存中,这可能是一场噩梦。它也是跨平台的,因此应该可以在Windows上工作,而不必使用第三方shell,如cygwin bash。

您可以使用args ex命令:

:args *.cpp *.hpp
这将打开当前目录中的所有cpp和hpp文件


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

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

vim -q <(git grep foo) vim-q<(git grep foo)
大多数人都叫它们backticks;)同意,这确实是对术语的严重误用。你应该更喜欢
$(command)
语法而不是反勾
`command`
语法。前者更清晰且可嵌套,而后者在涉及引号和撇号且无法嵌套时会变得混乱。似乎与:和相关: