【问题标题】:How to search across a directory of files in vim?如何在vim中搜索文件目录?
【发布时间】:2011-01-12 13:08:32
【问题描述】:

我在 vim 中的一个常见编程任务是:

:s/some pattern/

做一些工作

n # 找到下一个条目

做一些工作

n # 找到下一个条目 ...

现在,s/.... 只在当前文件中搜索。

有没有办法可以做到这一点,但要在文件的目录中搜索?对以 .cpp.hpp 结尾的 pwd 的子目录中的所有文件说“s/..../”?

谢谢!

【问题讨论】:

  • 这只是一种解决方法,所以我不会将其发布为答案:您可以在一个 vim 会话中打开所有文件,这样您就可以 :n 到下一个,然后录制一个宏这样做 :s/.../ 和 :n 并执行宏足够多的次数。 (过于频繁地运行宏不会造成任何伤害,因为替换只会为最后一个文件一次又一次地尝试)

标签: vim editing


【解决方案1】:

有一个很棒的插件叫ctrlsf.vim,它可以让你在vim中高效地搜索。

这是它的快照。很酷,不是吗?

例如,如果要在当前目录中搜索“hello”之类的单词,安装后只需输入:

:CtrlSF "hello"

那么你会得到你所期望的。

玩得开心!

【讨论】:

    【解决方案2】:
    :help windo
    :help bufdo
    man find
    man xargs
    
    find ./start/point -iname "*.cpp" -print0 | xargs -0 vim
    :bufdo s/baar/foo/gc
    :wall
    :qall
    

    gc "global confirm", wall (写所有), qall (相当所有)。查看文件列表 :ls top 跳转到下一个文件 :wn (下一个写入)或 :bn (下一个缓冲区)。顺便说一句,xargs 管理内存中的大块文件以毫无错误地传递给 vim。

    【讨论】:

      【解决方案3】:

      您可以简单地使用:grep command:或者更完整的搜索工具集成,使用grep.vim extension

      只需键入:help grep 即可获得有关 Vim 开箱即用功能的良好文档。 使用 :grep foo *.?pp 应该做你想做的事。 这将打开QuickFix list,就像您使用:make 一样,可以跳转到找到的事件。

      【讨论】:

      • 不错的答案!安装 grep.vim 后,我们可以使用 :Grep something */*.cpp
      • 或者你可以使用:vimgrep
      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 2018-04-26
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多