oeasy教您玩转vim - 67 - # 批量替换
?
批量替换
回忆上次
- 我们可以用vimdiff快速的比较文件
 - 这很实用!!!
 - 实用的一些跳转方式
 - 
遍历所有的修改change
]c下一条修改[c上一条修改
 - 
遍历所有的函数method
]m下一条修改[m上一条修改
 - 
面对不同点
- 把当前的改成对比的 - do - diff obtain
 - 把对比的改成当前的 - dp - diff put
 
 - 关于多窗口
 - 还有什么好玩的吗???
 
回忆同时打开2个文件执行windo
vi -o o1 o2- 
:windo normal Ioeasywindo所有窗口都执行normal进入普通模式Ioeasy插入oeasy
 - 
:windo normal owindo所有窗口都执行normal进入普通模式o换行
 - 
:windo normal "%pwindo所有窗口都执行normal进入普通模式"%p粘贴各自文件名
 
批量替换
- 
:windo %s/oeasy/o2z/gwindo所有window窗口都进行%s/oeasy/o2z/g把oeasy替换为o2z- 然后可以
:wqall全部保存 
 
批量细节
- 
可以设置
range,这个指的是window编号:1,3windo normal Ioeasy
 - 
可以执行批处理序列,用
|隔开各个命令:windo %s/oeasy/o2z/g| %s/o2z/o3z/g- 这样就可以执行两条替换命令了
 :windo set nolist nofoldcolumn | colorscheme blue
 
bufdo
- 除了
windo - 
我们还可以对每一个
buffer执行命令:bufdo %s/oeasy/o2z/g| %s/o2z/o3z/g- 可以设置 autowrite 自动保存
 - 也可以设置 hidden 支持未修改buffer隐藏
 - 还可以 
:bufdo %s/oeasy/o2z/g| %s/o2z/o3z/g|update自动更新 
 - 可
:ls、:buffers查看当前的buffers列表 :bd1、:bd o2z.txt可删除bufferse .可打开新的buffer缓冲- 可以用
:b1选择缓存 
argdo
- 我们还有一种批量执行命令的方式
 :argdo %s/oeasy/o2z/g| %s/o2z/o3z/g- 
打开.c文件,设置文件格式并更新
:args *.c:argdo set ff=unix | update
 - 
打开
.c或.h文件,批量替换并更新:args *.[ch]:argdo %s/\
 - 可以用
:args查看相应的参数列表 - 可以用
:argd删除参数 - 可以用
:arga添加参数 
把网页文件批量替换md文件
- 
vi **/*.html- 把2级目录下所有html用vim打开
 
 - 
:args- 观察所有参数
 
 - 
:argdo %s//[!\2]\1 | update
- 替换img标签
 
 - 
:argdo %s/\(.\{-\}\)<\/a>/[\2]\1/g | update- 替换a标签
 
 - 
:%s/\(.*\)
/- \1/gc- 替换h1标签
 
 - 
:%s/\(.*\)
/ - \1/g- 替换h2标签
 
 
之前 - zs
- 
要求
- 把 
oeasy.org替换为oeasy.io - 但是 
vim.org不替换 
 - 把 
 
- 
/oeasy\zs.org- 查找前面有
oeasy的.org 
 - 查找前面有
 - 
:%s/oeasy\zs.org/.io/g- 前面是
oeasy的.org换成.io 
 - 前面是
 - 
:%s/\- 以 
o为单词开头的.org都替换 
 - 以 
 
多文件替换
- 
:argdo %s/\- 对所有的arguments参数
 - 执行全文批量替换
 - 并且更新
 
 
- 
/^\s*\zsif- 开头只有空格和tab的if
 
 - 
/\(.\{-}\zsFab\)\{3}- 第三个 
Fab 
 - 第三个 
 
之后 - ze
- 
end\ze\(if\|for\)endif和endfor中的end
 
综合应用
- 
\- 以 
o开头的 - 后面跟 
o什么g的 
 - 以 
 - 
:bufdo %s/\- 把以 
o开头的、后面跟o什么g的单词都换成ooo - 对于所有的 
buffers - 全文替换
 
 - 把以 
 
总结
- 
这次有三种批量替换,分别是
:windo:bufdo:argdo- 执行的
{cmd}可以用|按顺序增加 
 - 
分别对应的
windowsbuffersarguments
 - 各有各自的列表、切换、删除增加的方式
 - 
以什么开始、结束的模式
zsze
 - 
关于
window窗口容器- 我们切得越细
 - 可用的范围越小
 - 总共 
80*24的屏幕资源很快就用完了 
 - 我又想多线程访问
 - 又想有足够的屏幕来编辑
 - 那怎么办呢???
 - 除了window之外还有容器吗???
 - 下次再说 ??
 
[Github地址] (
?




