我在~/src
。我可以git grep _pattern_
获取与此模式匹配的所有*.cpp
或*.hpp
个文件的列表。
现在,我想查看与模式匹配的所有文件并对其进行编辑。我怎么在Vim中这样做? (基本上,我希望Vim像git grep一样浏览我的目录,然后跳转到正确的文件。)
答案 0 :(得分:13)
您可以使用单个引号(也是unix shell功能),例如:
vim `git grep --name-only <your expression>`
答案 1 :(得分:8)
在bash中,你可以做到
vim $(grep -l _pattern_ *.cpp *.hpp)
但这是一个bash功能,而不是vim功能。
答案 2 :(得分:5)
你可以使用args ex命令:
:args *.cpp *.hpp
这将打开当前目录中的所有cpp和hpp文件。
您可以使用任何可用的文件路径扩展:grep。
答案 3 :(得分:2)
您可以设置grepprg和grepformat选项以运行git grep...
并解释结果。然后,这将允许您运行命令:grep并将结果读入quickfix缓冲区 - 有关详细信息,请参阅:h quickfix
。然后,您可以使用:cnext和:cprev,或者:copen来打开一个带有文件列表的单独窗口 - 将光标放在文件名上,按回车键将打开该文件进行编辑。
这比Zoran和ammoQ的建议更有优势的是,在您想要编辑它们之前,它不会将文件读入内存。他们的建议可能会同时将数百个文件加载到内存中,这可能是管理的噩梦。它也是跨平台的,所以应该在Windows上运行而不必使用第三方shell,例如cygwin bash。
答案 4 :(得分:1)
通过正确使用quickfix列表,您甚至可以立即转到右侧(使用:help quickfix
命令,例如:cn
或:cw
)。所以,如果您使用的是bash或zsh:
vim -q <(git grep foo)