vim:如何在所有打开的文件中搜索/替换?

问题描述 投票:0回答:5

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

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

vim 1.cpp 2.cpp 3.cpp

我希望:

  1. 在所有 3 个文件中搜索所有名为“main”的函数并显示在 QuickFix 窗口中。

  2. 将所有 3 个文件中的所有“hello”替换为“world”。

list search vim replace buffer
5个回答
16
投票

使用命令:

bufdo %s/字符串/替换/g 

bufdo:对所有缓冲区执行操作。
s : 替换
g : 全球.


6
投票

如果您的 Vim 足够新,您可以使用

:cdo
命令:

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

4
投票

根据您在 vim 中处理多个文件的方式(选项卡、窗口等),您可以使用不同的命令在多个文件中搜索和替换

  • :tabdo
    (所有选项卡)
  • :windo
    (当前选项卡中的所有窗口)
  • :bufdo
    (所有缓冲区,即使用
    :ls
    命令列出的所有缓冲区)
  • :argdo
    (参数列表中的所有文件)
  • :cdo
    (快速修复列表中列出的所有文件)

首先用vim标签页打开多个文件:

$ vim -p file1.txt file2.txt

然后在vim中,您可以使用以下命令在多个文件中搜索和替换:

:tabdo %s/pattern/replace/gc

2
投票

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

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


-3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.