【发布时间】:2011-01-11 12:26:03
【问题描述】:
我在~/src。我可以通过git grep _pattern_ 获取与此模式匹配的所有*.cpp 或*.hpp 文件的列表。
现在我想浏览所有与 pattern 匹配的文件并对其进行编辑。我如何在 Vim 中做到这一点? (基本上,我希望 Vim 像 git grep 一样遍历我的目录,然后跳转到正确的文件。)
【问题讨论】:
我在~/src。我可以通过git grep _pattern_ 获取与此模式匹配的所有*.cpp 或*.hpp 文件的列表。
现在我想浏览所有与 pattern 匹配的文件并对其进行编辑。我如何在 Vim 中做到这一点? (基本上,我希望 Vim 像 git grep 一样遍历我的目录,然后跳转到正确的文件。)
【问题讨论】:
通过正确使用快速修复列表,您甚至可以立即转到正确的行(使用:help quickfix 命令,例如:cn 或:cw)。所以,如果你使用的是 bash 或 zsh:
【讨论】:
您可以使用 args ex 命令:
:args *.cpp *.hpp
这将打开当前目录中的所有 cpp 和 hpp 文件。
您也可以使用 :grep 可用的任何文件路径扩展。
【讨论】:
您可以设置 grepprg 和 grepformat 选项来运行 git grep... 并解释结果。然后,您可以运行命令 :grep 并将结果读入 quickfix 缓冲区 - 请参阅 :h quickfix 了解更多信息。然后,您可以使用 :cnext 和 :cprev 逐步浏览它们,或 :copen 以打开一个包含文件列表的单独窗口 - 将光标放在文件名上并按回车键将打开该文件进行编辑。
与 Zoran 和 ammoQ 的建议相比,它的优势在于它不会将文件读入内存,直到您想要编辑它们。他们的建议可能一次将数百个文件加载到内存中,管理起来可能是一场噩梦。它也是跨平台的,因此可以在 Windows 上运行,而无需使用第三方 shell,例如 cygwin bash。
【讨论】:
您可以使用单引号(也是 unix shell 功能),例如:
vim `git grep --name-only <your expression>`
【讨论】:
$(command) 语法而不是反引号 `command` 语法。前者更清晰且可嵌套,而后者在涉及引号和撇号时会变得混乱且无法嵌套。
在 bash 中,你可以这样做
vim $(grep -l _pattern_ *.cpp *.hpp)
但这是 bash 功能,而不是 vim 功能。
【讨论】: