這是 Neovim 從零開始系列的第一篇。整個系列共 12 篇文章,將帶你從完全不懂 Vim,到能用 Neovim 打造一個完整的現代化開發環境。
我和 VSCode 的故事
我用 VSCode 已經好幾年了。它確實是一款優秀的編輯器——免費、生態豐富、上手容易。從 JavaScript 到 Go,從前端到後端,VSCode 幾乎都能勝任。
但隨著使用時間越長,有些小事情開始困擾我:
- 手不斷在鍵盤和滑鼠之間來回,選取文字、點選檔案、開關 terminal
- 長期使用 Claude Code 等 terminal 工具,卻得在 VSCode 和 terminal 之間頻繁切換
- 看著 Vim 使用者行雲流水的操作,思考自己是不是錯過了什麼
如果你也有類似的感受,那這個系列就是為你寫的。
什麼是 Modal Editing?
VSCode 和大多數現代編輯器都是 modeless 的——按下 a 就是輸入 a,永遠如此。這很直覺,但也意味著所有的操作快捷鍵都得靠 Ctrl、Alt、Cmd 等修飾鍵來觸發。
Vim 採用完全不同的設計哲學:modal editing(模式編輯)。在不同的模式下,同一個按鍵有不同的功能:
| 模式 | 用途 | 進入方式 |
|---|---|---|
| Normal | 瀏覽、移動、操作文字 | Esc |
| Insert | 輸入文字(和一般編輯器一樣) | i, a, o 等 |
| Visual | 選取文字 | v, V, Ctrl-V |
| Command | 執行指令 | : |
為什麼這樣設計?因為寫程式時,你大部分的時間都在閱讀和編輯,而非打字。Normal mode 讓你用最少的按鍵完成最多的操作——不需要任何修飾鍵。
舉個例子,要刪除一個單字:
- VSCode:雙擊選取 → 按
Delete(或Ctrl+D選取 → 刪除) - Vim:按
daw(delete a word)
三個按鍵,不需要滑鼠,不需要修飾鍵。
Vim 的語言:可組合的指令
Vim 最強大的設計不只是模式,而是它的操作方式就像一門語言:
動詞 + 名詞 = 動作
- 動詞(Operator):
d(刪除)、c(修改)、y(複製) - 名詞(Motion / Text Object):
w(單字)、)(句子)、i"(引號內的內容)
一旦你學會了這個系統,操作就變成直覺式的「說話」:
| 指令 | 意思 |
|---|---|
dw |
刪除到下一個單字 |
ci" |
修改引號內的內容 |
yap |
複製整個段落 |
dt) |
刪除到 ) 之前 |
你學會一個新的動詞,它自動適用於所有名詞;學會一個新的名詞,它也自動適用於所有動詞。這就是 Vim 的 乘法效應——你的能力是 動詞數 × 名詞數,而不是需要死記每一個組合。
我們會在第二篇詳細教這套語言系統。
鍵盤優先的工作流
使用 Vim 一段時間後,你會發現一個根本性的變化:你的手不再離開鍵盤。
這不只是省了移動滑鼠的時間。更重要的是,它消除了「思考 → 操作」之間的摩擦。當你想到要做什麼,手指已經在執行了——不需要先去找滑鼠、瞄準按鈕、再點擊。
這種「心手合一」的感覺,是 Vim 使用者一旦體驗就回不去的原因。
效率提升的具體場景
| 場景 | VSCode 操作 | Vim 操作 |
|---|---|---|
| 刪除整行 | 滑鼠選取整行 → Delete | dd |
| 修改函數名稱 | 雙擊選取 → 輸入新名稱 | ciw + 輸入 |
| 移動到檔案開頭 | Ctrl+Home 或滾動 |
gg |
| 複製 3 行 | 滑鼠拖曳選取 → Ctrl+C |
3yy |
| 在行尾加分號 | End → 輸入 ; |
A; |
| 刪除到行尾 | Shift+End → Delete |
D |
每一個操作看起來只差幾百毫秒,但累積一整天下來,差異就很明顯了。更重要的是心流(flow state)不會被打斷。
Terminal 原生的開發體驗
這是我轉向 Neovim 的另一個重要原因:整個開發流程都在 terminal 完成。
當你使用 Claude Code 時,你已經在 terminal 裡了。如果編輯器也在 terminal 裡,你就可以:
- 在同一個 terminal session 中切換編輯和 AI 對話
- 不需要切換視窗——所有工作都在同一個螢幕
- SSH 到遠端伺服器也能用同樣的編輯器和配置
- tmux / zellij 等 terminal multiplexer 提供比 VSCode 更靈活的分割畫面
┌──────────────────────────────────────────┐
│ Terminal │
│ ┌──────────────────┬───────────────────┐ │
│ │ │ │ │
│ │ Neovim │ Claude Code │ │
│ │ (編輯器) │ (AI 助手) │ │
│ │ │ │ │
│ ├──────────────────┴───────────────────┤ │
│ │ Shell / 測試輸出 │ │
│ └──────────────────────────────────────┘ │
└──────────────────────────────────────────┘
這種 terminal-native 的工作流,讓開發環境變得極其統一和可移植。
為什麼是 Neovim 而不是 Vim?
你可能會問:為什麼不直接用 Vim?
Neovim 是 Vim 的現代化分支(fork),2014 年啟動,目標是解決 Vim 長年累積的技術債。主要優勢:
| 特性 | Vim | Neovim |
|---|---|---|
| 配置語言 | Vimscript | Lua(也支援 Vimscript) |
| LSP 支援 | 需要外掛 | 內建 |
| Treesitter | 需要外掛 | 內建 |
| 非同步處理 | 有限 | 完整支援 |
| Plugin 生態 | 成熟但老化 | 活躍且現代 |
| 社群 | 穩定 | 快速成長 |
簡單來說,Neovim 給你 Vim 的所有能力,加上現代編輯器該有的功能。用 Lua 寫配置也比 Vimscript 更友善、更好維護。
轉換的心態準備
在開始之前,我想分享幾個重要的心態調整:
1. 學習曲線是陡峭的,但值得
前兩週你的效率會明顯下降。這很正常。就像學打字時從「一指神功」轉換到「盲打」,一開始一定比較慢,但一旦過了那個坎,速度會遠超以前。
2. 不需要一次全換
你可以先在 VSCode 裝 Vim extension 來練習 Vim 操作。等 Vim 的基本操作變成肌肉記憶後,再考慮搬到 Neovim。這個系列的前四篇(基礎篇)完全可以在 VSCode + Vim extension 的環境下練習。
3. 你不需要背所有指令
Vim 有幾百個指令,但日常使用的可能只有 30-50 個。學會核心操作就夠了,其他的隨用隨查,自然就記住了。
4. 享受過程
學 Vim 有點像玩遊戲——不斷發現新的快捷操作、新的組合技巧。每天都能學到一點新東西,這個過程本身就很有趣。
這個系列會教什麼?
整個系列分為三個階段:
基礎篇(第 1-4 篇)
打好 Vim 操作的基礎。不需要安裝任何東西,可以用 VSCode + Vim extension 來練習。
- 第 1 篇:為什麼離開 VSCode(你正在看的這篇)
- 第 2 篇:Vim 的語言——動詞、名詞、組合
- 第 3 篇:移動的藝術——高效瀏覽程式碼
- 第 4 篇:編輯效率加倍——registers、macros、dot command
設定篇(第 5-8 篇)
安裝 Neovim,從零開始配置成一個現代化的開發環境。
- 第 5 篇:安裝 Neovim 與第一個 init.lua
- 第 6 篇:Plugin 管理——lazy.nvim
- 第 7 篇:程式碼智能——LSP + 自動補全
- 第 8 篇:語法高亮與檔案導航
進階篇(第 9-12 篇)
整合開發工具,打造完整的工作流。
- 第 9 篇:Git 整合工作流
- 第 10 篇:Terminal 與 Claude Code 整合
- 第 11 篇:打造你的快捷鍵系統
- 第 12 篇:從 VSCode 完全畢業
開始之前
在進入第二篇之前,你可以先做這些準備:
- 在 VSCode 安裝 Vim extension(搜尋 “Vim” by vscodevim)
- 開啟它,試著用
hjkl來移動游標 - 按
Esc回到 Normal mode,感受一下模式切換
不用急著學太多,先習慣「按 Esc 回到 Normal mode」這個動作就好。
下一篇,我們會正式進入 Vim 的核心——它那個優美的「語言」系統。
Neovim 系列文章導航
基礎篇
- 為什麼我想離開 VSCode?(本篇)
- Vim 的語言——動詞、名詞、組合技
- 移動的藝術
- 編輯效率加倍
設定篇 5. 安裝 Neovim 與 init.lua 6. Plugin 管理 lazy.nvim 7. 程式碼智能 LSP + 補全 8. 語法高亮與檔案導航
進階篇 9. Git 整合工作流 10. Terminal 與 Claude Code 整合 11. 打造快捷鍵系統 12. 從 VSCode 完全畢業