Vim 文本替换超过文件数

Vim 文本替换超过文件数,vim,replace,full-text-search,Vim,Replace,Full Text Search,我已经习惯了在Vim中使用表达式来跨大文件进行替换,我想知道要学习什么实用程序,可以让我以类似的方式跨文件文件夹进行替换。 用于搜索和替换的哪个命令行程序最像vims并跨文件夹工作?可能,您应该使用vim而不是外部命令行程序。请参见:help:find或:help:grep 例如,如果要跨文件夹grep单词,请传递***.txt sed -i.bak 's/foo/bar/g' * 将在当前目录中每个文件的每一行上用bar替换每个foo,并创建扩展名为.bak的备份文件 因此,我将研究sed

我已经习惯了在Vim中使用表达式来跨大文件进行替换,我想知道要学习什么实用程序,可以让我以类似的方式跨文件文件夹进行替换。
用于搜索和替换的哪个命令行程序最像vims并跨文件夹工作?

可能,您应该使用
vim
而不是外部命令行程序。请参见
:help:find
:help:grep

例如,如果要跨文件夹grep单词,请传递
***.txt

sed -i.bak 's/foo/bar/g' * 
将在当前目录中每个文件的每一行上用
bar
替换每个
foo
,并创建扩展名为
.bak
的备份文件

因此,我将研究
sed
。但是Vim非常有能力:

vim -c "bufdo!%s/foo/bar/g" -c "wqa" *
几乎是一样的。
bufdo
执行以下命令(
%s/foo/bar/g
在本例中=>将每行上的
foo
替换为
bar
%
是每行的特殊行地址))<代码>wqa表示:全部写入然后退出。您最多可以指定10个到Vim的
-c
开关,这些开关将按指定顺序执行。基本上这就是Vim自动化:

  • 打开当前目录中的每个文件=>每个文件都有自己的缓冲区
  • 对每个缓冲区执行替换
  • 然后写入文件并退出

  • 唯一的区别是缺少备份文件创建(这可以通过一些
    .vimrc
    设置轻松实现)。但是
    sed
    更快

    您可以通过结合perl和bash来实现这一点 例如:

    find . -type f -name "*.cpp" -print | xargs perl -i -pe 's/pattern/replace/g' 
    

    这将找到从“.”开始的所有“.cpp”文件,并将每个文件(路径)传递(管道)到perl命令

    您能详细说明什么是“bufdi!”%“s”和“wqa”在这里做什么?谢谢你的提示。对于.css脚本,使用如此强大的工具,我几乎感到肮脏;)