為什麼要學 vim#
在 Linux 世界中,vi 幾乎是唯一保證存在的文字編輯器。無論是最小安裝的伺服器、Docker 容器、還是嵌入式系統,vi 都在。vim(Vi IMproved)是 vi 的增強版,增加了語法高亮、多層撤銷、分割視窗等功能。
學 vim 的理由不是因為它比 VS Code 好用,而是:
- 它無處不在——遠端 SSH 到伺服器時,vim 可能是唯一的選擇
- 許多系統工具(如
crontab -e、visudo、git commit)預設呼叫 vi/vim - 它的操作模式啟發了大量現代工具(VS Code 的 Vim 插件、瀏覽器的 Vimium 等)
三種模式的設計哲學#
vim 最獨特的設計是模式化操作。這看似反直覺,但背後有深思熟慮的邏輯——將「瀏覽/編輯/指令」三種不同性質的操作分開,讓每種模式都能用最少的按鍵完成最多的工作。
一般指令模式(Normal Mode)#
進入 vim 後的預設模式。在這個模式中,每個按鍵都是指令——移動游標、複製、刪除、搜尋、取代都在這裡完成。
這是 vim 的核心模式,也是初學者最不適應的地方:你打的字不會出現在畫面上,而是被當作指令執行。
編輯模式(Insert Mode)#
按下 i、a、o 等鍵從一般模式切換進來。此時鍵盤輸入才會出現在檔案中,行為和一般的文字編輯器一樣。按 Esc 回到一般模式。
指令列模式(Command-line Mode)#
在一般模式下按 : 進入。用來執行檔案操作(存檔、離開)、全域搜尋取代、設定選項等。
vim 的學習曲線陡峭,但一旦掌握,編輯效率會遠超過一般編輯器。關鍵在於思維轉換:不要把 vim 當作一個有快捷鍵的記事本,而是一種操作語言——「刪除(d)到行尾($)」=
d$,「複製(y)3 行(3j)」=y3j。
暫存檔與救援機制#
vim 在編輯檔案時會建立一個 暫存檔(swap file),檔名通常是 .filename.swp。這個機制的作用:
- 如果 vim 意外中斷(如 SSH 斷線),暫存檔保留了未存檔的修改
- 下次開啟同一個檔案時,vim 會偵測到暫存檔並提供復原選項
如果你在遠端作業時 SSH 斷線,vim 的暫存檔會殘留在檔案系統中。下次開啟時 vim 會顯示警告。確認不需要恢復後,記得刪除暫存檔(或選擇 Delete it),否則每次開啟都會看到警告。
vim 的進階能力#
區塊選擇(Visual Block)#
Ctrl + v 可以進入矩形選取模式,選取一個矩形範圍的文字進行操作。這在編輯結構化的文字(如設定檔、CSV)時特別有用——可以一次對多行的同一欄位進行修改。
多檔案與多視窗#
- 同時開啟多個檔案,在檔案間複製貼上
- 用
:sp或:vsp分割視窗,同時檢視多個檔案
環境設定#
~/.vimrc 是 vim 的個人設定檔,可以自訂:
- 行號顯示、語法高亮
- 縮排規則(tab 寬度、自動縮排)
- 搜尋行為(即時搜尋、高亮匹配)
- 自訂快捷鍵
不需要一開始就追求完美的
.vimrc。先掌握基本操作(移動、編輯、存檔離開、搜尋取代),在實際使用中逐步加入需要的設定。
編碼與換行符號#
編碼問題#
當檔案的編碼與終端的編碼不一致時就會出現亂碼。現代系統建議統一使用 UTF-8。
DOS 與 Linux 換行符號#
- Linux:
\n(LF) - Windows/DOS:
\r\n(CR+LF)
在 Linux 上執行用 Windows 編輯的 shell script 時,
\r會被當作指令的一部分,導致各種莫名其妙的錯誤。dos2unix工具可以轉換換行符號。這是跨平台開發中極為常見的問題。