如何在vim中搜索文件夹中的文件?

35

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

:s/some pattern/

做一些工作

n # 找到下一个条目

做一些工作

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

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

有没有一种方法可以做到这一点,但可以在一个目录中搜索文件?比如在以.hpp.cpp结尾的子目录下使用 "s/..../" ?

谢谢!


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

37
你可以简单地使用:grep命令:或者为了更完整地集成搜索工具,可以使用grep.vim扩展
只需输入:help grep,就可以获得Vim中默认提供的详细文档。 使用:grep foo *.?pp应该可以满足你的需求。 这将打开QuickFix列表,就像使用:make时一样,可以跳转到找到的位置。

1
很好的回答!安装grep.vim后,我们可以使用命令::Grep something */*.cpp - camino
或者你可以使用:vimgrep - khatchad

7
有一个名为 ctrlsf.vim 的插件非常棒,它可以让你在 vim 中高效地搜索。以下是它的截图。相当酷炫,不是吗? enter image description here 例如,如果你想在当前目录中搜索单词 "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表示"全局确认",wall表示"写入所有",qall表示"退出所有"。要查看文件列表:ls;跳转到下一个文件:wn(写入下一个)或bn(缓冲区下一个)。另外,xargs可以管理大块文件在内存中进行操作,以便无误地传递给vim。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接