oeasy教您玩轉vim - 67 - # 批量替換
批量替換
回憶上次
我們可以用vimdiff快速的比較文件
這很實用?。?!
實用的一些跳轉方式
遍歷所有的修改change
]c
下一條修改[c
上一條修改遍歷所有的函數method
]m
下一條修改[m
上一條修改面對不同點
把當前的改成對比的 - do - diff obtain
把對比的改成當前的 - dp - diff put
關于多窗口
還有什么好玩的嗎???
回憶同時打開2個文件執(zhí)行windo
vi -o o1 o2
:windo normal Ioeasy
windo
所有窗口都執(zhí)行normal
進入普通模式Ioeasy
插入oeasy
:windo normal o
windo
所有窗口都執(zhí)行normal
進入普通模式o
換行:windo normal "%p
windo
所有窗口都執(zhí)行normal
進入普通模式"%p
粘貼各自文件名
批量替換
:windo %s/oeasy/o2z/g
windo
所有window
窗口都進行%s/oeasy/o2z/g
把oeasy
替換為o2z
然后可以
:wqall
全部保存
批量細節(jié)
可以設置
range
,這個指的是window
編號:1,3windo normal Ioeasy
可以執(zhí)行批處理序列,用
|
隔開各個命令:windo %s/oeasy/o2z/g| %s/o2z/o3z/g
這樣就可以執(zhí)行兩條替換命令了
:windo set nolist nofoldcolumn | colorscheme blue ?
bufdo
除了
windo
我們還可以對每一個
buffer
執(zhí)行命令: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
可刪除buffers
e .
可打開新的buffer
緩沖可以用
:b1
選擇緩存
argdo
我們還有一種批量執(zhí)行命令的方式
:argdo %s/oeasy/o2z/g| %s/o2z/o3z/g
打開.c文件,設置文件格式并更新
:args *.c
:argdo set ff=unix | update
打開
.c
或.h
文件,批量替換并更新:args *.[ch] ? ?
:argdo %s/\<my_foo\>/My_Foo/ge | update ? ?
可以用
:args
查看相應的參數列表可以用
:argd
刪除參數可以用
:arga
添加參數
把網頁文件批量替換md文件
vi **/*.html
把2級目錄下所有html用vim打開
:args
觀察所有參數
:argdo %s/<img src=\"\(.\{-}\)\" title=\"\(.\{-}\)\" \/>/[!\2]\1 | update
替換img標簽
:argdo %s/<a href=\"\(.\{-\})\">\(.\{-\}\)<\/a>/[\2]\1/g | update
替換a標簽
:%s/<h1>\(.*\)</h1>/- \1/gc
替換h1標簽
:%s/<h2>\(.*\)</h2>/ ? ? ? ?- \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.*\zs.org/.io/g
以
o
為單詞開頭的.org
都替換

多文件替換
:argdo %s/\<o.*\zs.org/.io/g | update
對所有的arguments參數
執(zhí)行全文批量替換
并且更新

/^\s*\zsif
開頭只有空格和tab的if
/\(.\{-}\zsFab\)\{3}
第三個
Fab
之后 - ze

end\ze\(if\|for\)
endif
和endfor
中的end

綜合應用
\<o.*\ze\.o.g
以
o
開頭的后面跟
o
什么g
的:bufdo %s/\<o.*\ze\.o.g/ooo/g
把以
o
開頭的、后面跟o
什么g
的單詞都換成ooo
對于所有的
buffers
全文替換
總結
這次有三種批量替換,分別是
:windo
:bufdo
:argdo
執(zhí)行的
{cmd}
可以用|
按順序增加分別對應的
windows
buffers
arguments
各有各自的列表、切換、刪除增加的方式
以什么開始、結束的模式
zs
ze
關于
window
窗口容器我們切得越細
可用的范圍越小
總共
80*24
的屏幕資源很快就用完了我又想多線程訪問
又想有足夠的屏幕來編輯
那怎么辦呢???
除了window之外還有容器嗎???
下次再說 *
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[藍橋實驗樓 邀請碼FJWYIMGB] (https://www.lanqiao.cn/courses/2840)