vim的替換

本文約定:
$ + 命令 表示在普通的bash的命令行下
:  + 命令 表示在vim的ex(命令)模式, 按"Ctrl" + ":" 進入

替換命令的基本語法

:s + / + 被替換的內容 + / + 替換的內容 ( + 分隔符 + 模式 ) (其中:s(s表示switch,替換))vim

當前中模式old的第一次出現修改成new

:s / old / new /   (當斜杆爲該行的最後一個字符時,可不寫)bash

當前行old的每次出現改成new

:s / old / new / g
:s命令容許替換串後面帶有選項,g選項影響一行中的每一個模式,不要把它與影響文件中全部行的:g命令混淆.net

多行old的每次出現改成new

經過在:s命令前加上地址前綴,能夠把它的範圍擴展到多行。例以下面命令把50行到100行的old的每次出現都改成new:
:50, 100 s / old / new / g命令行

特別的,從第一行到最後一行的多行即爲整個文件
兩種方式
:1, $s / old / new / g
咱們知道%等價於1,$,因此上行命令也能夠這樣寫:
:% s / old / new / gcode

替換前需確認

在替換命令尾部加上c (confirm用於確認),在替換每一個old前都會提示並確認:
:1, 30 s /old/new/ gc
將會出現提示replace with hehe (y/n/a/q/l/^E/^Y)?  
y替換,n不替換,a替換全部,q放棄,l替換第一個並進入插入模式,^E^Y是提示你用Ctrl+eCtrl+y來滾動屏幕的。blog

上下文相關替換(正則替換)

正則替換,匹配字符串能夠使用正則,懶得看就用這個:s/pattern/new/,其它參數和前文一致字符串

更具體的來講(其實沒什麼用)
語法格式以下(:g(global全局)):
:g /pattern/s/old/new/g    將會把包含pattern的行中,把全部old替換爲new
第一個g表示是在文件的全部行上執行的命令,模式pattern識別要發生替換的行。在那些包含模式pattern的行上,ex將把old替換(s)爲new。最後的g表示在該行上進行所有替換。get

若是用來進行搜索的模式與想要修改的模式相同,那麼就沒必要重複它:
:g/string/s//new/g  等價於  :g/string/s/string/new/g
還要注意:
:g/string/s//new/g  也等價於 :% s/string/new/g
能夠用第二種方式少輸一些字符string

參考

vim的全局替換it