Vim - 最強大的文字編輯器
Vim 是一款非常強大的文字編輯器,你完全可以在手不離開鍵盤的情況下,就完成撰寫你的程式碼,把鍵盤利用的淋灕盡致,大大提升你的產出效率。
因為有一些很常用的功能或組合我還是會忘記,所以這篇文章比較像是寫給我自己的備忘錄,也會一直更新!或許有一些操作是你沒有看過的,希望也能給你一些啟發,如果有什麼更好的解決方案,也請務必寫信到 hi@fattie.io 跟我分享。
最後更新:2025-09-21
我的作業系統是 macOS,Windows 的操作有可能會有些許的差異。另外,雖然我寫了一篇文章介紹 Vim,但這並不代表我是 Vim 的專家!文章中可能會有不完整的資訊,如果有缺漏或錯誤資訊,也請不吝指教。
如何上手 Vim
你可以在終端機中輸入 vimtutor
來進入官方的 Vim 使用教學,可以在 30 分鐘內熟悉 Vim 的基礎操作。如果你沒有使用過 Vim 的話,我強烈建議你投資這半小時的時間!
因為 Vim 的操作跟我們熟悉的圖形界面有很大的區別,所以除了練習 vimtutor
之外,我覺得更重要的是實際用 Vim 來寫一些小的專案,可以讓你最快速的熟悉它、內化成自己的技能。
常用快捷鍵
為了讓你快速上手,我整理了一些最常用的快捷鍵,也加上了一些方便你記憶的詞(但不一定是官方解釋)。
操作類別 | 按鍵/指令 | 功能說明 |
---|---|---|
移動游標 | h | 向左移動一個字元 |
l | 向右移動一個字元 | |
j (jump 向下跳) | 向下移動一行 | |
k (kick 向上踢) | 向上移動一行 | |
0 | 移動到行首 | |
$ | 移動到行尾 | |
w (word) | 跳到下一個單字的開頭 | |
e | 跳到單字的結尾 | |
編輯模式 | i (Insert) | 在游標前進入插入模式 |
a (Append) | 在游標後進入插入模式 | |
o | 在下一行新增並進入插入模式 | |
O | 在上一行新增並進入插入模式 | |
刪除操作 | x | 刪除游標所在字元 |
dd | 刪除整行 | |
儲存離開 | :w (write) | 儲存檔案 |
:q (quit) | 離開 Vim | |
:wq | 儲存並離開 | |
:q! | 強制離開(不儲存) | |
模式切換 | Esc | 回到一般模式(Normal Mode) |
怎麼退出 Vim
有個笑話是「最安全的編輯器是 Vim,因為沒人能退出,檔案不會被刪掉」。
在大多數終端機的操作中,Ctrl
C
就能退出,但在 Vim 中他只會中斷操作,並不會離開 Vim,stackoverflow 上一篇 2013 年的提問《How do I exit Vim?》甚至累積了超過 3 百萬的瀏覽。所以在你被 Vim 逼瘋以前,讓我先告訴你,按下 Esc
後輸入 :wq
可以存檔後離開、:q!
可以不存檔強制離開。
你可能會需要的
預設設定
你可以透過在終端機輸入 vim ~/.vimrc
來更改每次開啟 vim 的預設設定,以下是幾個我推薦的必備設定。
set number " 顯示行號
set expandtab " 把 Tab 鍵轉換成空白
set tabstop=4 " 一個 Tab 視為 4 個空白
set shiftwidth=4 " 自動縮排時縮排 4 個空白
set autoindent " 自動沿用上一行的縮排
set hlsearch " 強調顯示搜尋結果
set incsearch " 搜尋時即時顯示符合項目
set ignorecase " 大小寫不敏感搜尋
set smartcase " 如果有一個大寫字母,則使用大小寫敏感搜尋
syntax on " 啟用 Syntax Highlighting
複製到系統剪貼簿
進入 VISUAL MODE
選取欲複製的內容後,按下 "+y
即可將選取的內容複製到系統剪貼簿。
("
是用來指定寄存器(Register)的前綴,+
代表系統剪貼簿,所以 "+y
的意思就是把選取的內容複製(yank)到 +
寄存器,也就是複製到系統剪貼簿中。)
註:如果你的 Vim 沒有支援 +clipboard,"+y
可能無法使用。可以輸入 vim --version | grep clipboard
檢查。
搜尋與替代
在 NORMAL MODE
中輸入 /
即可搜尋,按 Enter
後 n
可以跳到下一個結果,N
跳到上一個。
替換的話我覺得比較繞口,我打算用例子來解釋。
# 假設有一行文字是這樣的:
foo foo foo
#輸入 :s/foo/bar 只會把第一個 foo 替換掉,結果是:
bar foo foo
# 輸入 :s/foo/bar/g 則會把整行的 foo 都替換掉:
bar bar bar
# 輸入 :%s/foo/bar/g 則會把整個檔案的 foo 都替換掉。
s
= substitute (替換),g
= global (對這一行所有出現的項目都替換),%
= 整個檔案。
更詳細的搜尋與替代的操作,可以參考 Harttle 的這篇文章。
註解多行
- 讓游標停在你想要註解的第一行,按下
Ctrl
V
,讓編輯器進入VISUAL BLOCK
模式。 - 移動游標到你想要註解的最後一行。
- 按下
Shift
I
,讓編輯器進入INSERT
模式,再輸入你想插入的註解符號(以 Python 來說是#
)。這個動作會在第一行加入#
。 - 按一下
Esc
並等一下(如果不想等的話,按兩下Esc
),Vim 就會自動在你選擇的每一行最前面都加入#
。
取消註解也是相同的邏輯,進入 VISUAL BLOCK
模式選取所有的註解後,按 x
刪除。
註解的示範:
取消註解的示範:
解法和 GIF 來自 Christian C. Salvadó 在 stackoverflow 上的回答。