Vim替換命令substitute介紹

2021-09-24 02:11:28 字數 3199 閱讀 3694

在vim替換命令一文介紹過,substitute命令的語法格式為::[range]s[ubstitute]///[flags]

[flags]表示可選的標誌位,常用的包括gcne等。其中,標誌位g使得substitute命令可以修改一行內的所有匹配,而不僅僅是第一處匹配;標誌位c可以確認或拒絕每一處修改;標誌位n讓 vim 不執行替換操作,而只是統計和顯示本次 substitute 命令匹配的個數;標誌位e專門用於遮蔽錯誤提示;標誌位&用於指示 vim 重用上一次 substitute 命令所用過的標誌位。

為了便於理解,可以將整個檔案想象成乙個二維平面,字元沿著 x 軸向右增加,而文字行則隨著 y 軸向下增長。預設情況下,substitute命令僅僅作用於當前行,而且只會修改第一處匹配。

怎麼才能將替換範圍擴大到由 x 與 y 軸所圍的整個平面?本文接下來以將下文**現的所有單詞going都替換為rolling為例逐步進行說明。

when the going gets tough, the tough get going.

if you are going through hell, keep going.

使用substitute命令,最簡單的方法就是為其提供待匹配的模式以及替換字串。因此,先嘗試在 vim 命令列模式下執行命令:

:s/going/rolling
執行完上述命令後,可以發現 vim 已經將第一處going替換成了rolling,但是文中其他匹配的內容並沒有發生替換。

為了使 substitute 命令作用於整個橫軸,需要使用標誌位g

g看似為全域性 (global) 的含義,容易讓人誤以為g標誌位是用於實現在整個檔案範圍內進行替換操作,但實際上,g僅表示當前一整行範圍。由於 vim 直接繼承自 「行編輯器 ed」,對於行編輯器而言,全域性的範圍就是一行,這就是g標誌位命令的由來。

繼續嘗試在 vim 命令列模式下執行命令:

:s/going/rolling/g
執行完該命令後,發現所有出現在當前行going都被替換成了rolling了,但除當前行外的檔案其他位置,仍然有一些匹配未被修改。

如何才能控制substitute命令在整個檔案的縱軸上執行呢?

答案就是使用subsititute命令格式中的[range]來指定乙個執行範圍。如果需要在整個檔案的每一行都執行替換命令,只需要在substitute命令的開頭加上字首%,關於range的具體使用,推薦閱讀vim操作範圍、檔案範圍介紹。

這次,嘗試在 vim 命令列模式下執行下述命令,發現確實把整個檔案中的going單詞替換成了新單詞rolling

:%s/going/rolling/g
總結上述的內容就是:如果想在當前檔案中查詢並替換部分匹配,就必須明確地指示substitute命令在整個 x 軸與 y 軸上執行的具體範圍,即通過標誌位g處理橫軸字元的同時,使用range指定處理縱軸的範圍。

有些時候,在執行具體的替換操作前,可能需要先觀察該處匹配再決定是否需要進行替換。

例如,在某個檔案中,假設單詞going一共出現了 10 次,出於具體語境需要,第 3 次出現的 going 並不應該被替換成 rolling,如果直接使用:%s/going/rolling/g則會把所有的 going 替換成 rolling,這顯然不符合要求。

為了完成上述的操作目的,需要使用用標誌位c來控制substitute命令的行為,需要執行的命令為:

:%s/going/rolling/gc
增加標誌位c後,vim 會在替換每處匹配結果之前都提示 「替換為 rolling ?」 供操作者手工確認,可以按y鍵確認一次修改,也可以按n鍵,跳過一次修改。無論選擇哪種結果,vim 都會執行輸入的決定並移動游標到下一匹配處再次進行提示。

除了可以選y確認,選n跳過以外,還可以鍵入q退出此次替換過程,使用a指示 vim 替換該處及該處後所有的匹配而無需再由人工確認,也可以使用l指示 vim 替換當前處匹配後直接退出替換過程。

下表總結了針對 vim 替換提示所給出的所有答案及用途。

答案用途

y替換此處匹配

n忽略此處匹配

q退出替換過程

l替換此處匹配後退出 (l 表示 last)

a替換此處與之後所有的匹配 (a 表示 all)

向上滾動螢幕

向下滾動螢幕

vim替換命令

原 語法為 addr s 源字串 目的字串 option 全域性替換命令為 s 源字串 目的字串 g addr 表示檢索範圍,省略時表示當前行。如 1,20 表示從第1行到20行 表示整個檔案,同 1,從當前行到檔案尾 s 表示替換操作 option 表示操作型別 如 g 表示全域性替換 c 表示進...

vim 替換命令

r 替換掉游標所在字元,一次只能替換乙個。操作 將游標置於需要替換的字元之上,按下 r 然後在按下其它字元,這樣原來字元就被替換掉了。r替換是在正常模式下進行的,一次只能替換乙個字元,若需要替換更多字元,子需要重複按下r進行替換。r 將正常模式切換到替換模式,這個是與小r區別是連續替換。cw與c命令...

vim替換命令

一 vi查詢 當你用vi開啟乙個檔案後,因為檔案太長,如何才能找到你所要查詢的關鍵字呢?在vi裡可沒有選單 查詢,不過沒關係,你在命令模式下敲斜桿 這時在狀態列 也就是螢幕左下腳 就出現了 然後輸入你要查詢的關鍵字敲回車就可以了。如果你要繼續查詢此關鍵字,敲字元n就可以繼續查詢了。值得注意的是 是向...