Vim 文字編輯器入門:從零開始不再卡關
為何要學 Vim?
Vim 的學習曲線很陡,很多人第一次進入 Vim 都不知道怎麼退出。但學會 Vim 是值得投資的:
- 伺服器上幾乎都有 Vim(或 Vi):遠端 SSH 到任何 Linux 伺服器,你都可以立刻用 Vim 編輯設定檔,不需要安裝其他軟體
- 不需要滑鼠:熟練後效率遠高於使用滑鼠的編輯器,手不需要離開鍵盤
- 系統管理的必要技能:很多指令(
crontab -e、git commit)預設開啟 Vim 作為編輯器 - 強大的文字處理能力:Vim 的宏(macro)、多行操作、正規表示式取代功能極其強大
如果目前還不習慣 Vim,可以先用
nano(更直觀,開啟後就能打字,Ctrl+X 存檔離開)。但長期建議花時間學 Vim。
Vim 的三種模式(最重要的概念)
Vim 讓初學者最困惑的就是它有多種模式,在不同模式下,同樣的按鍵有不同的功能:
┌─────────────────────────┐
│ │
▼ i / a / o │
┌─────────────┐ ──────────→ ┌──────────────┐
│ 一般模式 │ │ 插入模式 │
│ Normal Mode │ ←────────── │ Insert Mode │
└─────────────┘ Esc └──────────────┘
│
│ :(冒號)
▼
┌─────────────┐
│ 命令列模式 │
│ Command Mode│
└─────────────┘
| 模式 | 說明 | 如何進入 | 狀態列顯示 |
|---|---|---|---|
| 一般模式 Normal Mode |
Vim 的預設模式,用於移動游標、刪除、複製等操作。不能直接打字。 | 任何模式按 Esc | (空白) |
| 插入模式 Insert Mode |
就像普通文字編輯器,可以輸入和修改文字 | 在一般模式按 i、a、o | -- INSERT -- |
| 命令列模式 Command Mode |
在最下方的指令行輸入指令(存檔、搜尋、取代等) | 在一般模式按 : | 以 : 開頭的輸入行 |
不知道目前在哪個模式?按 Esc(可以多按幾次),一定能回到一般模式。卡住時按 Esc 是萬靈丹。
開啟與退出 Vim
$ vim filename.txt # 開啟(或建立)檔案
$ vim # 開啟空白的 Vim(之後再指定存檔路徑)
退出 Vim(很多人第一個問題)
首先確認你在一般模式(按 Esc),然後輸入:
| 指令 | 說明 |
|---|---|
:q | 退出(若有未儲存的更改則拒絕) |
:q! | 強制退出,不儲存(常用!) |
:w | 儲存(write) |
:wq | 儲存並退出(最常用!) |
:x | 儲存並退出(與 :wq 幾乎相同) |
| ZZ | 儲存並退出(快捷鍵版 :wq) |
| ZQ | 不儲存強制退出(快捷鍵版 :q!) |
游標移動(一般模式)
在一般模式下,移動游標的方式:
基本移動
| 按鍵 | 移動 |
|---|---|
| h j k l | 左 / 下 / 上 / 右(也可用方向鍵) |
| w | 跳到下一個單字的開頭 |
| b | 跳到前一個單字的開頭 |
| e | 跳到下一個單字的結尾 |
| 0(數字零) | 跳到行首(第一個字元) |
| ^ | 跳到行首的第一個非空白字元 |
| $ | 跳到行尾 |
頁面跳轉
| 按鍵 | 移動 |
|---|---|
| gg | 跳到檔案開頭 |
| G | 跳到檔案結尾 |
| 數字G | 跳到第 N 行(如 42G 跳到第 42 行) |
| Ctrl+F | 向下一頁 |
| Ctrl+B | 向上一頁 |
編輯操作(一般模式)
進入插入模式的各種方式
| 按鍵 | 進入插入模式的位置 |
|---|---|
| i | 游標前方(最常用) |
| a | 游標後方(append) |
| I | 行首 |
| A | 行尾 |
| o | 在當前行下方新增一行 |
| O | 在當前行上方新增一行 |
刪除
| 按鍵 | 刪除範圍 |
|---|---|
| x | 刪除游標所在的一個字元 |
| dd | 刪除整行(同時也是剪下) |
| 數字dd | 刪除 N 行(如 5dd 刪 5 行) |
| dw | 刪除從游標到下一個單字 |
| d$ | 刪除從游標到行尾 |
| d0 | 刪除從行首到游標 |
複製與貼上
| 按鍵 | 功能 |
|---|---|
| yy | 複製整行(yank) |
| 數字yy | 複製 N 行 |
| yw | 複製一個單字 |
| p | 貼上在游標之後(paste) |
| P | 貼上在游標之前 |
復原與重做
| 按鍵 | 功能 |
|---|---|
| u | 復原(undo)上一步操作 |
| Ctrl+R | 重做(redo) |
| .(句點) | 重複上一個操作 |
搜尋與取代
搜尋
/關鍵字 ← 在一般模式輸入,向下搜尋
?關鍵字 ← 向上搜尋
按 n 跳到下一個匹配,N 跳到上一個匹配。
取代(在命令列模式)
:s/舊字串/新字串/ ← 取代當前行的第一個
:s/舊字串/新字串/g ← 取代當前行的所有
:%s/舊字串/新字串/g ← 取代全文所有(最常用)
:%s/舊字串/新字串/gc ← 取代前逐一確認
儲存與退出(命令列模式)
:w ← 儲存
:w filename.txt ← 另存新檔
:wq ← 儲存並退出
:q! ← 強制退出(不儲存)
:set number ← 顯示行號
:set nonumber ← 隱藏行號
必記快捷鍵速查
把這些最重要的快捷鍵記起來,就足夠應付日常的 Vim 編輯:
| 類別 | 快捷鍵 | 功能 |
|---|---|---|
| 模式切換 | i | 進入插入模式(游標前) |
| o | 新增行並進入插入模式 | |
| Esc | 回到一般模式 | |
| 退出 | :wq | 儲存並退出 ⭐ |
:q! | 強制退出(不儲存)⭐ | |
:w | 只儲存 | |
| ZZ | 儲存並退出(快捷) | |
| 編輯 | dd | 刪除(剪下)整行 ⭐ |
| yy / p | 複製行 / 貼上 ⭐ | |
| u | 復原 ⭐ | |
| 搜尋 | /關鍵字 | 向下搜尋 ⭐ |
| n / N | 下 / 上一個匹配 | |
| 跳轉 | gg / G | 跳到檔案開頭 / 結尾 ⭐ |
| 數字G | 跳到第 N 行 |