How To Search And Replace String Across Multiple Files in Vim Single-file search and replace (substitution) Args Method1: Using argdo Method2: perform substitution with macros and repeat it

2025-06-07

如何在 Vim 中跨多个文件搜索和替换字符串

单文件搜索和替换(替换)

参数

方法1:使用argdo

方法二:用宏进行替换并重复

关注@learnvim获取更多 Vim 技巧和窍门!

VSCode 和 Atom 等热门编辑器都拥有一个实用功能,那就是能够跨项目中的多个文件搜索和替换字符串。如果 Vim 也能做到,岂不是很棒?

幸运的是,Vim 也能做到这一点,尽管一开始可能不太直观。最棒的是,我们无需安装任何插件即可实现这一点!我将展示两种在 Vim 中跨多个文件进行搜索和替换的方法。但在此之前,我们先来回顾一下基础知识。

单文件搜索和替换(替换)

如果您了解 Vim 的基本替换,请随意跳到下一部分。

vim 中的替换通过以下方式完成:

:%s/stringToBeReplaced/replacementString/g
Enter fullscreen mode Exit fullscreen mode

正则表达式也适用。这里我就不详细讲正则表达式了,不过你可以在 了解更多:h substitute

参数

您知道 Vim 有:ar[gs]接受文件列表的命令吗?

让我来演示一下如何使用 args。假设我们的目录包含如下内容:

├── index.js
├── server.js
Enter fullscreen mode Exit fullscreen mode

要捕获index.jsserver.js,我们可以这样做。现在:args *.js输入将显示:args

[index.js] server.js
Enter fullscreen mode Exit fullscreen mode

要转到下一个参数,请键入:n[ext]:prev[ious]转到上一个参数列表。

我们还可以使用 glob 函数对 args 进行递归搜索。以下是更多使用 args 的方法:

:args index.js server.js // captures only index and server js files
:args **/*.js            // captures every js files
:args **                 // captures everything 
Enter fullscreen mode Exit fullscreen mode

有了和:s:args我们就可以进行替换了!

方法1:使用argdo

现在我们已经获得了所有参数,可以执行常规替换了。
回想一下我们的替换方法,我们将它与 结合起来argdo

:argdo %s/stringToBeReplaced/replacementString/g | update
Enter fullscreen mode Exit fullscreen mode

这将用 bar 替换所有 foo 并将其应用于所有参数。

如果你对 argdo 感到困惑,你并不孤单。我直到不久前才听说过它。它实际上非常简单。如果我们看一下:h argdo,它确实:

对参数列表中的每个文件执行 {cmd}...

简而言之,它会将{cmd}你传入的所有内容(也就是所有 js 文件)应用到所有参数列表中。我们传递的是替换命令。

update是可选的。它会保存所有替换的文件。我这么做是因为我经常忘记保存它们。

方法二:用宏进行替换并重复

在录制宏时,对一个文件执行替换,并在所有参数中重复宏。

假设文件夹结构和参数相同,操作方法如下:

qq                                          // start macro in q register
%s/stringToBeReplaced/replacementString/ge  // the e flag tells vim to not throw an error if there is no match
:wnext                                      //important. This is similar to `:next`, but it also writes the current file
q                                           // stop macro
999@q                                       //repeat this macros either 999 times or to remaining files.
Enter fullscreen mode Exit fullscreen mode

就是这样!

你还有其他进行全局搜索和替换的技巧吗?我很想听听!

竖起大拇指

顺便说一句,这里有一个有趣的部分。第二种方法实际上列在 Vim 的“巧妙技巧”用户手册里(适用于 vim 7.3 及更高版本和 Neovim)。如果你有时间,应该看看整个部分(:h usr_12.txt)。它相当易读,简短,并且包含超级有趣的 vim hacks!

文章来源:https://dev.to/iggredible/how-to-search-and-replace-string-in-multiple-files-in-vim-20g2
PREV
2020 年如何学习 Vim 为什么要学习 Vim 学习 Vim 的技巧/窍门 Vim 资源 如何使用 :help 结论
NEXT
如何从 React 18 降级到 17.0.2