這是 Neovim 從零開始系列的第一篇。整個系列共 12 篇文章,將帶你從完全不懂 Vim,到能用 Neovim 打造一個完整的現代化開發環境。

我和 VSCode 的故事

我用 VSCode 已經好幾年了。它確實是一款優秀的編輯器——免費、生態豐富、上手容易。從 JavaScript 到 Go,從前端到後端,VSCode 幾乎都能勝任。

但隨著使用時間越長,有些小事情開始困擾我:

  • 手不斷在鍵盤和滑鼠之間來回,選取文字、點選檔案、開關 terminal
  • 長期使用 Claude Code 等 terminal 工具,卻得在 VSCode 和 terminal 之間頻繁切換
  • 看著 Vim 使用者行雲流水的操作,思考自己是不是錯過了什麼

如果你也有類似的感受,那這個系列就是為你寫的。

什麼是 Modal Editing?

VSCode 和大多數現代編輯器都是 modeless 的——按下 a 就是輸入 a,永遠如此。這很直覺,但也意味著所有的操作快捷鍵都得靠 CtrlAltCmd 等修飾鍵來觸發。

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 完全畢業

開始之前

在進入第二篇之前,你可以先做這些準備:

  1. 在 VSCode 安裝 Vim extension(搜尋 “Vim” by vscodevim)
  2. 開啟它,試著用 h j k l 來移動游標
  3. Esc 回到 Normal mode,感受一下模式切換

不用急著學太多,先習慣「按 Esc 回到 Normal mode」這個動作就好。

下一篇,我們會正式進入 Vim 的核心——它那個優美的「語言」系統。


Neovim 系列文章導航

基礎篇

  1. 為什麼我想離開 VSCode?(本篇)
  2. Vim 的語言——動詞、名詞、組合技
  3. 移動的藝術
  4. 編輯效率加倍

設定篇 5. 安裝 Neovim 與 init.lua 6. Plugin 管理 lazy.nvim 7. 程式碼智能 LSP + 補全 8. 語法高亮與檔案導航

進階篇 9. Git 整合工作流 10. Terminal 與 Claude Code 整合 11. 打造快捷鍵系統 12. 從 VSCode 完全畢業