Vim 內建的 :vimgrep 與 :argdo 指令組合,能在不依賴 find、sed、grep 等外部工具的情況下,完成跨多檔案的模式搜尋與批次替換。雖然速度略遜於 Shell 管線,但在缺乏標準 Unix 工具的環境(如 Windows)或偏好純編輯器操作時極為實用。

:vimgrep):vimgrep[!] /{pattern}/[g][j] {file} ...
:vimgrep[!] {pattern} {file} ...
{file} 支援萬用字元:* 代表當前目錄,** 代表當前目錄及遞迴子目錄。**/*.c 可匹配所有子目錄下的 C 原始碼檔。g 旗標:同一行多重匹配皆記錄;j 旗標:跳轉至第一個匹配處而不開啟 quickfix 視窗。:cnext / :cn — 下一個匹配:cprevious / :cp — 上一個匹配:cwindow / :cw — 開啟 quickfix 視窗顯示完整列表詳細用法請參閱 :help vimgrep。
:argdo)將當前目錄下所有 .txt 與 .cpp 檔案中的 hate 替換為 love:
:args *.txt *.cpp
:argdo %s/hate/love/gc | update
:args *.txt *.cpp — 掃描當前目錄符合條件的檔案並加入引數清單(argument list)。:args **/*.txt — 遞迴掃描所有子目錄。:args */*.txt — 僅掃描下一層目錄(不含當前目錄)。:argdo %s/hate/love/gc | update — 對引數清單中每個檔案執行全域替換(g)、逐一確認(c),並以 update 寫入磁碟(若無 | update 則僅在記憶體中修改,且替換會中斷)。執行批次替換前務必備份檔案! 此操作直接寫入磁碟,無法透過 Vim 的復原(u)跨檔案回滾。
若效能為首要考量,或需處理超大規模檔案集,建議改用 find + sed 或 grep + xargs + sed 等 Shell 管線組合,速度通常快數倍。