【问题标题】:Open all files that match a certain pattern in Vim在 Vim 中打开所有匹配特定模式的文件
【发布时间】:2011-01-11 12:26:03
【问题描述】:

我在~/src。我可以通过git grep _pattern_ 获取与此模式匹配的所有*.cpp*.hpp 文件的列表。

现在我想浏览所有与 pattern 匹配的文件并对其进行编辑。我如何在 Vim 中做到这一点? (基本上,我希望 Vim 像 git grep 一样遍历我的目录,然后跳转到正确的文件。)

【问题讨论】:

标签: vim grep


【解决方案1】:

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

vim -q &lt(git grep foo)

【讨论】:

    【解决方案2】:

    您可以使用 args ex 命令:

    :args *.cpp *.hpp
    

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

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

    【讨论】:

      【解决方案3】:

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

      与 Zoran 和 ammoQ 的建议相比,它的优势在于它不会将文件读入内存,直到您想要编辑它们。他们的建议可能一次将数百个文件加载到内存中,管理起来可能是一场噩梦。它也是跨平台的,因此可以在 Windows 上运行,而无需使用第三方 shell,例如 cygwin bash。

      【讨论】:

        【解决方案4】:

        您可以使用单引号(也是 unix shell 功能),例如:

        vim `git grep --name-only <your expression>`
        

        【讨论】:

        • 大多数人称它们为反引号;)
        • 同意,这确实是对术语的严重滥用。
        • 您应该更喜欢 $(command) 语法而不是反引号 `command` 语法。前者更清晰且可嵌套,而后者在涉及引号和撇号时会变得混乱且无法嵌套。
        【解决方案5】:

        在 bash 中,你可以这样做

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多