Aug 29, 2012 - vim    No Comments

Vim multi-file search and replace

实现了查找文件夹,自然会遇到文件夹多文件替换。那么vim是怎么实现的呢?
通过两个命令:

:args
:argdo

具体是怎么操作的呢?首先建立一些测试文件夹和文件,结构如下:

vim-test
├── folder1
│   ├─ 1.html
│   └─ forder1-1
│      └─11.js
│
├── folder2
│   ├─ 2.txt
│   └─ forder2-1
│      └─21.css
└── index.html


不管是html还是css还是js,里面的内容都是:

111
222
333
444
555

首先打开index.html, 这样vim也就进到vim-test目录
执行:

:args *.*

这样将当前目录下所有类型的文件都加入到参数列表中(不包括子文件夹中的文件),其实就是把index.html加入了参数列表里。
然后再执行:

:argdo %s/111/I want/egc | update

可以看到index.html的111被替换成”I want”了
参数说明:e是正则模式,为了区分大小写。g是对每一行中匹配的地方都替换。c是确认。

再继续测试:

:args */*.html
:argdo %s/222/fuck/g | update

说明:*/*.* 是将当前目录下 所有在子文件夹中的目录和子文件夹中的文件(不包括下一级文件)加入参数列表中。 那么 */*.html就是将当前目录下 所有在子文件夹中的html文件(不包括下一级文件)加入参数列表中。
可以看到只有1.html的222被替换成”fuck”了

继续:

:args */*.*
:argdo %s/333/fuck/g | update

可以看到只有1.html和2.txt的333都被替换成”fuck”了

继续:

:args **/*.*
:argdo %s/444/fangbingxin/g | update

可以看到,vim-test文件夹里所有文件中的”444″都被替换成了”fangbingxin”

是不是很简单 :)

Got anything to say? Go ahead and leave a comment!