nvim

🧠 Cheat Sheet(通用)

類型核心
移動^ $ w e b j k
精準f t ;
操作d y c + 數字
LSPgd gr K

⚡ 常用 Coding 流程速查

情境快捷鍵
選整檔ggVG(需 Shift+G
取代游標單字ciw
取代括號內容ci(
取代字串內容ci"
搜尋游標下單字*
全檔迭代取代同字/foocgn<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 / atHTML 標籤內 / 含標籤vit 選取標籤內容

Operator + Object

這才是 Vim 真正的威力:不要「選取再操作」,而是「直接下令」

組合功能推薦情境
ci(Change Inner (修改括號內的參數(最常用!)
ciwChange Inner Word取代游標下單字(刪除後進入 Insert 輸入新字)
yiwYank Inner Word複製目前所在的變數
diwDelete Inner Word剪下單字(留在 Normal,用 p 貼到別處)
viwVisual Inner Word框選變數(取代 Shift+左右鍵)
ci"修改引號內的字串快速換掉 API URL 或訊息
ca(修改括號(含括號本身)重構函數調用
da{刪除整個大括號區塊刪除整段 if / for
yi(複製括號內的參數搬移函數參數

ciw vs diwc 刪除後進 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/gVisual 選取範圍替換

gn — 搜尋並迭代修改

gn 選取下一個 match,cgn 直接修改,. 重複,比 macro 更直覺。

Key功能
gn選取下一個搜尋 match(visual)
cgn修改下一個 match
.重複上一次 cgn

實戰流程:

  1. /foo 搜尋目標
  2. cgn → 輸入新內容 → <Esc>
  3. . 重複套用,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)

流程:/foocgn → 輸入新字 → <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 操作

以下為 Neovim 內建 LSP keybindings(需設定 LSP server)。Vim 無此功能。<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模式用途
in → i游標前插入
an → i游標後插入
In → i行首非空白插入
An → 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(選整檔)注意:流程為 ggV(Visual Line)→ GShift+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)