VI 三大模式架構
| 模式 | 進入方式 | 核心功能 | 離開方式 |
| 命令模式 (預設) | 啟動 vi / 按 Esc | 游標移動、刪除、複製、搜尋、進入其他模式 | i/a/o → 輸入模式 / : → 底行模式 |
| 輸入模式 | i (插入) / a (附加) / o (新行) | 文字輸入、編輯 | Esc → 命令模式 |
| 底行模式 | : / / / ? | 儲存、離開、設定、大範圍搜尋取代、執行外部指令 | Enter 執行 / Esc 取消 → 命令模式 |
啟動與基本操作流程
# 編輯既有檔案
vi /etc/nginx/nginx.conf
# 建立新檔案
vi newfile.sh
# 進入後預設在「命令模式」—— 請先按 i 進入輸入模式再打字!
命令模式核心指令速查表
游標移動 (高頻必背)
| 指令 | 動作 | 記憶法 |
| h / j / k / l | 左 / 下 / 上 / 右 | 鍵盤右側字母區、j 似下鉤 |
| Ctrl+F / Ctrl+B | 向下/上翻頁 | Forward / Backward |
| Ctrl+D / Ctrl+U | 向下/上半頁 | Down / Up |
| 0 (數字零) | 行首 | 起始位置 |
| ^ | 行首非空白字元 | |
| $ | 行尾 | 結尾符號 |
| w / b / e | 下一字開頭 / 上一字開頭 / 字尾 | Word / Back / End |
| G | 檔案最後一行 | Go end |
| nG / :n | 跳至第 n 行 | |
| gg | 檔案第一行 | Go top |
刪除與修改
| 指令 | 動作 |
| x | 刪除游標所在字元 |
| X | 刪除游標前一字元 |
| dd | 刪除整行 (最常用) |
| ndd | 刪除 n 行 (如 5dd) |
| dw | 刪除至字尾 |
| D / d$ | 刪除至行尾 |
| r | 取代單一字元 |
| R | 進入取代模式 (覆寫) |
| cw | 修改至字尾 (刪除並進入輸入模式) |
| cc | 修改整行 |
複製與貼上
| 指令 | 動作 |
| yy | 複製整行 |
| nyy | 複製 n 行 |
| yw | 複製至字尾 |
| p | 貼上於游標後 (行貼上則新行) |
| P | 貼上於游標前 |
| "ayy | 複製至暫存器 a (支援 a-z 26 個) |
| "ap | 貼上暫存器 a 內容 |
撤銷與重複
- u:撤銷上一步 (多級)
- Ctrl+R:重做
- .:重複上一個編輯指令 (極強大)
搜尋與取代 (底行模式)
/pattern # 向下搜尋
?pattern # 向上搜尋
n / N # 下一個 / 上一個匹配
# 範圍取代
:s/old/new/ # 當前行首次
:s/old/new/g # 當前行全部
:%s/old/new/g # 全檔首次
:%s/old/new/gc # 全檔全部 + 逐個確認 (推薦)
:10,20s/old/new/g # 第 10-20 行
# 正則支援:\ 轉義、^ 行首、$ 行尾、. 任意字、* 0或多、[] 字元類
底行模式檔案操作
| 指令 | 動作 |
| :w | 儲存 |
| :w filename | 另存新檔 |
| :wq / :x | 儲存並離開 |
| :q | 離開 (未修改) |
| :q! | 強制離開不儲存 |
| :wq! | 強制儲存離開 (唯讀檔案需 root) |
| :set nu / :set nonu | 顯示/隱藏行號 |
| :set ic / :set noic | 搜尋忽略/區分大小寫 |
| :!command | 執行 Shell 指令 (如 :!ls) |
進階技巧
- 多檔案編輯:
vi file1 file2 → :n 下一個、:N 上一個、:buffers 列表
- 分割視窗:
:sp file 水平分割、:vsp file 垂直分割、Ctrl+W 切換焦點
- 標記跳轉: ma 標記 a、'a 跳至標記 a 行首、`a 跳至確切位置
- 宏錄製: qa 開始錄製存入 a、q 停止、@a 回放
- 外部排序:
:%!sort 全檔排序、:10,20!sort 區間排序
VIM 現代增強 (vim-enhanced / vim-gtk)
- 語法高亮:
:syntax on
- 自動縮排:
:set autoindent / :set smartindent
- 滑鼠支援:
:set mouse=a
- 編碼設定:
:set encoding=utf-8 fileencodings=utf-8,big5
- 外觀主題:
:colorscheme desert