vim: 如何在所有打开的文件中search/replace?

vim: How to search/replace in all opened files?

如果我使用:vimgrep,它会搜索当前目录下的所有文件。但是我的要求是在所有打开的文件中search/replace。

例如我正在使用 vim 同时打开 3 个文件

vim 1.cpp 2.cpp 3.cpp

我希望:

  1. search all functions called "main" and display in quickfix window, among all 3 files.

  2. Replace all "hello" with "world" in all 3 files.

您可以使用命令模式。 %s/(查找字符串)/(替换字符串)

使用命令:

bufdo s/string/replacement/g 

bufdo:对所有缓冲区的操作。
s :替换
g :全局。

如果您的 Vim 足够新,您可以使用 :cdo 命令:

:vimgrep main {1,2,3}.cpp
:cwindow
:cdo s/foo/bar/g

我使用了以下对我有用的命令。按顺序使用此命令。

:set autowriteall :bufdo! %s/pattern/replace/g