在 Vi/Vim 編輯器中,:s 命令是處理字串替換的核心工具。雖然許多使用者僅熟悉全文替換的基本語法,但其實這個命令擁有極為豐富的變化,能應對各種複雜的編輯場景。本文系統整理了常用的替換模式,並附上實用技巧,供日後快速查閱。
核心格式為::範圍s/搜尋字串/替換字串/標誌
. 當前行、% 全文、n,$ 第 n 行到尾行)。g(global,全行替換),若省略則僅替換每行首次出現的目標。:s/vivian/sky/ # 替換當前行第一個 "vivian" 為 "sky"
:s/vivian/sky/g # 替換當前行所有 "vivian" 為 "sky"
:n,$s/vivian/sky/ # 從第 n 行到尾行,每行替換第一個
:n,$s/vivian/sky/g # 從第 n 行到尾行,每行全部替換
# 若 n 為 ".",表示從當前行開始
:%s/vivian/sky/ # 全文每行替換第一個
:%s/vivian/sky/g # 全文所有 "vivian" 替換為 "sky"
# 等同於 :g/vivian/s//sky/ 及 :g/vivian/s//sky/g
可使用 #、+ 等非字母數字字元作為分隔符:
:s#vivian/#sky/# # 將 "vivian/" 替換為 "sky/"
:%s+/oradata/apras/+/user01/apras1+ # 使用 + 分隔,替換路徑
將 Windows 檔案(CRLF,即 0D0A)移至 Linux(LF,0A)時,常殘留 ^M(0D)。以下方法可移除:
:%s/^V^M//g (輸入時需按 Ctrl+V 再按 Ctrl+M)tr -d "\r" filename > newfile
tr -d "\015" filename > newfile
sed 's/\r//g' filename > newfile
| 位置 | 語法範例 | 含義 |
|---|---|---|
| 命令尾部 | :s/old/new/g | 該行所有匹配項替換 |
| 命令首部 | :g/old/s//new/ | 全文所有包含 old 的行執行替換 |
| 無 g | :s/old/new/ | 每行僅替換首次出現 |
掌握這些模式,能大幅提升在 Vim 中處理文字、程式碼、設定檔的效率。建議實際操作練習,將常用組合內化為肌肉記憶。