nvim
🧠 Cheat Sheet(通用)
| 類型 | 核心 |
|---|---|
| 移動 | ^ $ w e b j k |
| 精準 | f t ; |
| 操作 | d y c + 數字 |
| LSP | gd gr K |
⚡ 常用 Coding 流程速查
| 情境 | 快捷鍵 |
|---|---|
| 選整檔 | gg → V → G(需 Shift+G) |
| 取代游標單字 | ciw |
| 取代括號內容 | ci( |
| 取代字串內容 | ci" |
| 搜尋游標下單字 | * |
| 全檔迭代取代同字 | /foo → cgn → <Esc> → . |
| 多行行首同步插入 | <C-v> → 選行 → I → 輸入 → <Esc> |
| 跳到定義 | gd |
| 刪整行 | dd |
| 複製整行 | yy |
| 復原 | u |
| 重做 | <C-r> |
⚠️ Caps Lock 在 Vim 中無效:
G(跳到檔尾)必須用Shift+G。開著 Caps Lock 按g仍是小寫,在 Visual mode 或 LazyVim 中會觸發 g-prefix 選單。
── CODING / EDITING ──
常用編輯操作
| Key | 功能 |
|---|---|
. | 重複上一個操作 (repeat last change) |
dd | 刪除整行 |
yy | 複製整行 |
p / P | 貼上(游標後 / 前) |
x | 刪除游標字元 |
D | 刪到行尾 |
C | 修改到行尾 |
r{char} | 取代單一字元 |
J | 合併下一行 |
% | 跳到配對括號 |
~ | 切換游標下字元大小寫 |
gU{motion} | 轉大寫(如 gUw 轉大寫單字) |
gu{motion} | 轉小寫(如 guw 轉小寫單字) |
文字物件
文字物件不能單獨使用,必須搭配 operator:
d(刪除)、y(複製)、c(修改)、v(選取)。
| 物件 | 說明 | 範例(含 operator) |
|---|---|---|
iw / aw | 單字(inner / around) | diw 刪除、viw 選取 |
iW / aW | 大單字(含符號) | ciW 修改 user.name |
i" / a" | 引號內 / 含引號 | ci" 修改字串 |
i( / a( | 括號內 / 含括號 | yi( 複製參數 |
i{ / a{ | 大括號內 / 含大括號 | da{ 刪除整塊 |
it / at | HTML 標籤內 / 含標籤 | vit 選取標籤內容 |
Operator + Object
這才是 Vim 真正的威力:不要「選取再操作」,而是「直接下令」。
| 組合 | 功能 | 推薦情境 |
|---|---|---|
ci( | Change Inner ( | 修改括號內的參數(最常用!) |
ciw | Change Inner Word | 取代游標下單字(刪除後進入 Insert 輸入新字) |
yiw | Yank Inner Word | 複製目前所在的變數 |
diw | Delete Inner Word | 剪下單字(留在 Normal,用 p 貼到別處) |
viw | Visual Inner Word | 框選變數(取代 Shift+左右鍵) |
ci" | 修改引號內的字串 | 快速換掉 API URL 或訊息 |
ca( | 修改括號(含括號本身) | 重構函數調用 |
da{ | 刪除整個大括號區塊 | 刪除整段 if / for |
yi( | 複製括號內的參數 | 搬移函數參數 |
ciwvsdiw:c刪除後進 Insert 模式(原地取代單字);d刪除後留 Normal 模式(剪下,移動後p貼上)。 改名變數(所有引用)用 LSP Rename(<leader>cr,詳見 lazyvim.md),不是ciw。
縮排
| Key | 功能 |
|---|---|
>> / << | 向右 / 左縮排 |
= | 自動縮排(搭配 motion) |
搜尋與替換
| 指令 | 功能 |
|---|---|
:%s/old/new/g | 全檔替換 |
:%s/old/new/gc | 全檔替換(逐一確認) |
:s/old/new/g | 當行替換 |
:'<,'>s/old/new/g | Visual 選取範圍替換 |
gn — 搜尋並迭代修改
gn選取下一個 match,cgn直接修改,.重複,比 macro 更直覺。
| Key | 功能 |
|---|---|
gn | 選取下一個搜尋 match(visual) |
cgn | 修改下一個 match |
. | 重複上一次 cgn |
實戰流程:
/foo搜尋目標cgn→ 輸入新內容 →<Esc>.重複套用,n跳過
多游標 / 多行同步編輯
Block Visual 多行同步插入
原生 Vim 最強的多行操作:用區塊選取後同步插入/修改。
| 流程 | 功能 |
|---|---|
<C-v> → 選行 → I → 輸入 → <Esc> | 多行行首插入文字 |
<C-v> → 選行 → A → 輸入 → <Esc> | 多行行尾追加文字 |
<C-v> → 選欄 → c → 輸入 → <Esc> | 取代多行同一欄位 |
<C-v> → 選行 → d | 刪除多行同一欄位 |
💡 注意:I/A 在 <C-v> 模式下行為與普通 Insert 不同,離開 Insert(<Esc>)後才同步套用到所有行。
實戰範例:
// 在多行行首加 //(注解)
<C-v> → jjj → I → // → <Esc>
// 在多行行尾補 ;
<C-v>$ → jjj → A → ; → <Esc>選取同字迭代修改(cgn)
流程:/foo → cgn → 輸入新字 → <Esc> → . 重複,n 跳過
詳見上方 gn — 搜尋並迭代修改 章節。
多游標外掛(multicursor.nvim)
LazyVim extra editor.multicursor,見 lazyvim.md 的 multicursor.nvim 章節。
| 方法 | 適合情境 |
|---|---|
Block Visual I/A | 多行結構相同,操作同欄位 |
cgn + . | 同字取代,逐一確認 |
multicursor.nvim | 複雜多點編輯,類 VS Code Ctrl+D |
Change List
記錄每次修改位置,可快速跳回。
| Key | 功能 |
|---|---|
g; | 跳到上一個修改位置 |
g, | 跳到下一個修改位置 |
復原 / 重做
| Key | 功能 |
|---|---|
u | 復原 (undo) |
Ctrl-r | 重做 (redo) |
U | 復原整行所有修改 |
LSP 操作
<leader> 系列(Code Action、Rename 等)為 LazyVim 專屬,見 lazyvim.md。| Key | 功能 |
|---|---|
gd | 跳到定義 (Go to Definition) |
gr | 列出所有參考 (References) |
gi | 跳到實作 (Implementation) |
K | 顯示 hover 文件 |
gK | 顯示函數簽名 (Signature Help) |
[d / ]d | 上 / 下一個診斷錯誤 |
── MODE / INSERT ──
模式與插入
| Key | 模式 | 用途 |
|---|---|---|
i | n → i | 游標前插入 |
a | n → i | 游標後插入 |
I | n → i | 行首非空白插入 |
A | n → i | 行尾插入 |
<Esc> | i → n | 回 Normal |
Insert Mode 操作
| Key | 功能 |
|---|---|
Ctrl+U | 刪除游標到行首(清空當前輸入) |
Ctrl+W | 刪除游標前一個單字 |
Ctrl+H | 刪除游標前一個字元(同 Backspace) |
Ctrl+D | 減少縮排 |
Ctrl+T | 增加縮排 |
Ctrl+N | 觸發補全(選下一個) |
Ctrl+P | 觸發補全(選上一個) |
Ctrl+O | 執行一次 Normal 指令後返回 Insert |
Ctrl+R{reg} | 插入暫存器內容(Ctrl+R" 插入剪貼簿) |
Ctrl+[ | 退出 Insert 模式(同 Esc) |
Ctrl+E | 插入下方同列字元 |
Ctrl+Y | 插入上方同列字元 |
── MOVEMENT / NAVIGATION ──
行內定位
| Key | 停在哪 | 常用情境 |
|---|---|---|
0 | 行最左 | 看 indent |
^ | 第一個非空白 | Go code 最常用 |
$ | 行尾 | 檢查整行 |
g_ | 行尾最後字元 | 補 )、, |
上下移動(相對行號)
| Key | 動作 | 實戰用途 |
|---|---|---|
j / k | 上 / 下 1 行 | 微調 |
5j / 3k | 上 / 下多行 | 快速瀏覽 |
d3j | 刪除 3 行 | 刪 debug |
y2k | 複製 2 行 | 複製 struct |
c4j | 修改 4 行 | 重構 |
指定行號
| Key | 功能 | 使用時機 |
|---|---|---|
:42 | 跳到第 42 行 | 最推薦,最穩定 |
42G | 跳到第 42 行 | compiler / linter |
gg | 檔案開頭 | package / import |
G | 檔案結尾 | init |
💡 LazyVim 提示:直接輸入 :行號 可以避免觸發 g 的選單。
單字移動
精準(程式碼)
| Key | 停在哪 | 用途 |
|---|---|---|
w | 下一字首 | method chain |
e | 字尾 | 改變變數 |
b | 上一字首 | 回頭修 |
ge | 上一字尾 | 精修 |
粗移動
| Key | 停在哪 |
|---|---|
W | 下一段 |
E | 段尾 |
B | 上一段 |
f / t 精準定位
⚠️
f/t僅在同一行內有效,無法跨行搜尋字元。;/,重複也同樣限於同行。
| Key | 功能 |
|---|---|
f( | 找 ( 並停在 |
t( | 停在 ( 前 |
F) | 往回找 |
; | 重複 |
, | 反向 |
| 組合 | 意義 |
|---|---|
3fs | 第 3 個 s |
d2ts | 刪到第 2 個 s 前 |
── SEARCH / VISUAL ──
搜尋
| Key | 功能 |
|---|---|
/text | 搜尋 |
n / N | 下一 / 上一 |
* | 搜尋游標下單字(向下) |
# | 搜尋游標下單字(向上) |
Ctrl-o / Ctrl-i(跳回 / 跳前)
| 指令 | 說明 |
|---|---|
Ctrl-o | 跳回先前的游標位置(jump backward) |
Ctrl-i | 跳到下一個游標位置(jump forward) |
💡 使用場景:
- 你在文件中隨意
G/ 搜尋 / 移動後想快速回到原本位置。
gg 搭配
| 指令 | 說明 |
|---|---|
gg | 跳到檔案開頭 |
gg + 數字 | 可搭配 d / y / c 等動作,例如 dgg 刪到開頭 |
⚠️
ggVG(選整檔)注意:流程為gg→V(Visual Line)→G(Shift+G跳到檔尾)。Caps Lock 在 Vim 中無效,g仍是小寫。
Visual 選取
| Key | 用途 |
|---|---|
v | 字元選取 |
V | 整行 |
<C-v> | 區塊 |
gv | 重選 |
o | 切換選取範圍端點 |
~ | 切換大小寫 |
u | 轉小寫 |
U | 轉大寫 |
── ADVANCED ──
Marks
| Key | 功能 |
|---|---|
m{a-z} | 設定本地 mark(如 ma) |
`{a-z} | 跳到 mark 精確位置(行+列) |
'{a-z} | 跳到 mark 所在行首 |
`` | 跳回上次游標位置 |
'. | 跳到上次修改位置 |
Macro
| Key | 功能 |
|---|---|
q{char} | 開始錄製 macro(如 qa) |
q | 停止錄製 |
@{char} | 播放 macro(如 @a) |
@@ | 重複上一次 macro |
5@a | 播放 macro 5 次 |
── WINDOW / UI ──
捲動畫面
| Key | 功能 |
|---|---|
Ctrl-d / Ctrl-u | 半頁下 / 上 |
Ctrl-f / Ctrl-b | 整頁下 / 上 |
zz | 游標置中 |
zt / zb | 游標置頂 / 置底 |
Split 視窗
| Key | 功能 |
|---|---|
<C-w>v | 垂直分割 |
<C-w>s | 水平分割 |
<C-w>h/j/k/l | 移動到左/下/上/右視窗 |
<C-w>= | 等寬所有視窗 |
<C-w>o | 只保留當前視窗 |
Buffer 管理
| Key | 功能 |
|---|---|
<C-^> | 切換上一個 buffer(原生 vim) |