像是「取代」- 在文件中找到特定的字串,然後把它代換成另一個字串。
只是它的指令比較複雜一點,我常常會忘記。
:1,$s/pattern1/pattern2/g
這表示從第 1 行到最後一行都把 pattern1 換成 pattern2,而且是同一行中不管有幾個 pattern1 都換掉。
1,$ 表示要取代的範圍,這表示從第一行到最後一行,如果是整個文件的話,可以用 % 簡化。
s 是取代指令
g 則是表示同一行中,每一個 pattern1 都要被換掉,如果沒有這個參數,只有第一個會被換掉。
用%表示整篇文章時,指令就會變成
:%s/pattern1/pattern2/g
或者用 "." 來表示現在所在的這行
:.,$s/pattern1/pattern2/g
另外,也是可以反向表示範圍
:.,1s/pattern1/pattern2/g
只是 VIM 會跟你確認是不是打錯了? Backwards range given, OK to swap (y/n)?
最後的 g 這個部份,除了 g 之外,還有 i 跟 c 可以用。i 表示不分大小寫,c 表示每個取代都要確認。
(y/n/a/q/l/^E/^Y)?
- y 是代表執行目前的取代。
- n 是跳過。
- a 代表 always ,就是從目前以後的取代都會執行。
- q 則是不要作取代,並且離開詢問要不要取代的狀態,並回到指令模式或原來的模式下。
- l 則是 last 的意思,就是目前這個取代執行後就離開詢問的取代模式,回到指令模式或原來的模式下。
- ^E 表示往前一頁。
- ^Y 表示往後一頁。
另外因為 pattern 的部份支援 Regular Expression ,所以變化還蠻多的
例如:1,$s/^...//g 會把每一列開頭的三個字元刪除。
詳情可以參考:Vi 或在 VI/VIM 中下 :h:s 指令(:s 的 help)
沒有留言:
張貼留言