vi 是 POSIX 標準編輯器,幾乎所有 Unix/Linux 系統預裝。掌握 vi 意味著在任何最小化容器、嵌入式設備、救援模式下都能高效編輯配置。本文將命令按場景分類,配合肌肉記憶訓練路徑,助你從「誤進 vi 只能重啟」進階為「行雲流水」。
| 命令 | 場景 |
|---|---|
vi file | 新建/編輯,光標定首行 |
vi -r file | 恢復崩潰交換文件 (.swp) |
vi -R file | 只讀模式 (等同 view file) |
vi + file | 光標定末行 |
vi +n file | 光標定第 n 行 |
vi +/pattern file | 光標定首個匹配行 |
vi -c "cmd" file | 啟動前執行 Ex 命令 (如 -c "set nu") |
Esc 或 Ctrl+[ 從任何模式強制返回。i/a/o/O/s/c 等命令進入。| 類別 | 命令 | 效果 | 記憶鉤子 |
|---|---|---|---|
| 字符/單詞 | h / l | 左/右一字符 | ← / → 鍵位 |
| w / b | 下/上一單詞**首** | Word / Back | |
| e / ge | 下/上一單詞**尾** | End / Go End | |
| 0 / ^ / $ | 行首 / 首非空白 / 行尾 | 數字 0 / 首字符 ^ / 結尾 $ | |
| f{char} / t{char} | 行內向後/前跳至字符**上/前** | Find / Till | |
| ; / , | 重複上次 f/t 同/反方向 | ; | |
| 行級 | j / k | 下/上一行 | 鍵位下/上 |
| {n}j / {n}k | 下/上 n 行 | 數字前綴 | |
| gg / G | 文件首/末行 | Go Go / Go End | |
| {n}G / :{n} | 跳轉第 n 行 | Ex 命令 | |
| 屏幕 | H / M / L | 屏幕頂/中/底行 | High / Middle / Low |
| Ctrl+u / Ctrl+d | 向上/下半屏 | Up / Down | |
| Ctrl+b / Ctrl+f | 向上/下一整屏 | Back / Forward | |
| 標記 | m{a-z} | 設置本地標記 | Mark |
| '{a-z} / `{a-z} | 跳轉標記行首 / 精確位置 | 反引號精確 |
| 操作 | 命令 | 說明 |
|---|---|---|
| 進入插入 | i / a / I / A / o / O | 光標前/後、行首/尾、下/上新行 |
| 刪除 | x / X / dd / D / dw / db | 字符/行/至行尾/單詞 |
| 修改 (刪除+進入插入) | c / cc / cw / cb / C / s / S | 同刪除對應,C=cc, S=cc |
| 復制 (Yank) | yy / Y / yw / y$ | 行/至行尾/單詞 |
| 粘貼 | p / P | 光標後/前 |
| 撤銷/重做 | u / Ctrl+r | 多級撤銷 |
| 重複上次編輯 | . | 最強效率鍵 |
| 可視模式 | v / V / Ctrl+v | 字符/行/塊選擇,配合 d/y/c |
/pattern # 向後搜索
?pattern # 向前搜索
n / N # 同/反方向重複
* / # # 搜索光標下單詞向後/前
:s/old/new/ # 當前行首次替換
:s/old/new/g # 當前行全局替換
:start,end s/old/new/g # 行範圍替換
:%s/old/new/g # 全文替換
:%s/old/new/gc # 全文替換並逐個確認
# 分隔符可換:s#old#new#g 避免路徑含 / 時轉義
# 正則組:\d \s \w . * + ? ^ $ \( \) \| \[ \] 需轉義
# 替換引用:& (整個匹配) \1 \2 (捕獲組)
| 命令 | 效果 |
|---|---|
| :w | 保存 |
| :wq / :x / ZZ | 保存並退出 |
| :q! | 強制不保存退出 |
| :w newfile | 另存為 |
| :w !sudo tee % | 無權寫入時借 sudo 保存 (神技) |
qa 開始錄製存入寄存器 a,q 結束,@a 回放,100@a 批量執行。:args *.c 加載列表,:next/:prev 切換,:argdo %s/old/new/g \| update 批量替換保存。:sp file 橫向,:vsp file 縱向,Ctrl+w w/h/j/k 切換。:r !cmd 讀入命令輸出,:!cmd 執行命令,:%!sort 全文排序。~/.vimrc 寫入 set nu hlsearch incsearch ignorecase smartcase tabstop=4 shiftwidth=4 expandtab。vi 學習曲線陡峭,但一旦形成肌肉記憶,編輯速度將遠超任何 IDE。堅持 7 天,終身受益。
生產級 iptables 防火牆規則模板(防掃描、抗 SYN Flood、防 Ping of Death)
Linux 新掛載分區剛建立就佔用 100 多 MB 空間?原因解析
Linux I/O 重定向進階技巧:文件描述符操作、標準流控制與腳本實戰
使用 virsh 指令列管理 KVM 虛擬環境:儲存池、儲存卷、虛擬機建立完整實戰
Linux mount 指令完整指南:掛載 USB、ISO、光碟、網路磁碟與 fstab 設定
Linux tcpdump 進階用法:選項詳解、過濾語法、抓包存檔、Wireshark 離線分析工作流