全部速查表

Vim 命令速查

Vim/Neovim 快速參考:模式、光標移動、編輯、搜尋與取代、多檔案瀏覽、寄存器/巨集、視覺區塊編輯——附最常用動作的簡短範例。

37 條命令

模式與存檔

:w / :q / :wq / :q!

存檔、離開、存檔後離開、強制離開(不存檔)。

:w file(另存新檔);:w!(強制);:x(修改過才存檔離開);:qa! 強制關閉全部;:wqa

:w | :q 或 ZZ
i / a / o / I / A / O

進入插入模式:i 在游標前/a 在後;o/O 在下方/上方新增一行;I/A 到行首/行尾。

i 在此編輯 => o 新行並插入 => I 行首 => A 行尾
<Esc> / Ctrl-[

回到 Normal 模式(也可用 Ctrl-c/Ctrl-[)。會取消待運算的 operator。

i Hello<Esc> ; 然後 :w

光標移動

h / j / k / l

向左/下/上/右移動一個字元。(方向鍵也可以。)

5j — 向下移動 5 行
w / b / e / W / B / E

逐詞移動(標點與空白分開);W/B/E 以空白分詞。

wdw ; 3W 向前跳到第三個以空白分隔的詞
0 / $ / ^

行首(硬)/行尾/第一個非空白字元。

0 到行首;$ 到行尾;^ 到第一個非空白字元
gg / G / :N

第一行/最後一行/跳到第 N 行。可用百分比移動:50%。

gg=G 對整份檔案排版(搭配 =)
H / M / L / Ctrl-d / Ctrl-u

螢幕頂/中/底(H/M/L);下半頁(Ctrl-d)/上半頁(Ctrl-u)。

Ctrl-d 與 Ctrl-u 翻頁;10Ctrl-f 向前一整頁
{ / } / ( / )

以段落(大括號)或句子(小括號,ASCII 文字)為單位跳躍。

5{ ; 2} 向前跳兩段
f<char> / F<char> / t / T ; ; / ,

在當前行上向前/向後尋找字元(f/F);用 ;/, 重複。t/T 停在字元前。

f, 將游標帶到下一個逗號 ; df, 刪到下一個逗號為止

插入模式

Ctrl-h / Ctrl-w / Ctrl-u

打字時的倒退/刪詞/刪行——讓 coding-vim 更順手。

i hello world<Ctrl-w> 剩下 'hello '
Ctrl-o <cmd> / Ctrl-r <reg>

執行一次 normal 模式指令(Ctrl-o);在插入模式貼上寄存器(Ctrl-r)。

Ctrl-r = expr 即時運算表示式

Ctrl-r " 未命名寄存器;Ctrl-r 0 yank 寄存器;Ctrl-r =5+5 插入 10

編輯 operator

d / x / X / c

刪除/刪游標下字元/刪游標前字元/變更(刪除後進入插入模式)。可搭配 motion:dw/xp/c$。

dd 刪整行;cc 改整行;D 刪到行尾;C 改到行尾

dw | dw$ | dw | 3dd | C 重新排版當前行
y / yy / Y

複製(yank)。yy/Y 複製整行;y$/yW 等搭配 motion。

y2w yy p gp — 複製兩個詞、整行、貼上、貼到下方且游標不動
p / P / gp / gP

在游標後(p)/前(P)貼上。gp/gP 讓游標停在貼上內容的尾端。

p 貼到下方;P 貼到上方;gp 貼在後,游標停在尾端
u / Ctrl-r / U

復原/重做(Ctrl-r)。U 將整行還原到原始狀態(已不推薦,改用可重複計數)。

u u u ; Ctrl-r Ctrl-r ; 5u 復原最近 5 次變更
. / @: / q:

重複上一次編輯(.)——非常強大。@: 重複最近的巨集;q: 開啟指令歷史。

i Monday<Esc> ; 然後 . . . . 套用到數行
r / R / J / gq

替換單一字元(r<char>)/進入 Replace 模式(R)/合併行(J,gJ 不加空格)/排版(gq{motion})。

raZ 改一個字;J 合併;gqap 排版當前段落

縮排

>> / << / = / :set autoindent

縮排/取消縮排/自動縮排(=)。搭配 motion:=G 到結尾;`gg=G` 對整份檔案排版。

5>> 縮排 5 行;=ap 對段落自動縮排;gg=G 對整個 buffer 排版

搜尋與取代

/pat / ?pat / n / N

向前(/)/向後(?)搜尋;n/N 同方向/反方向重複。

/\<word\> 詞邊界;\v very-magic 正則;\c 忽略大小寫;\C 區分大小寫

/TODO\c ; n 下一個;N 上一個;*/# 搜尋游標下的詞
* / # / g* / g#

搜尋游標下的詞:* 向前(# 向後)。g* 包含相鄰邊界。

把游標停在 foo 上按 * — 跳到下一個 foo,n 繼續
:%s/pat/rep/g / :5,12s/foo/bar/g

取代——全域、可指定範圍、旗標,並可逐個確認。

%s/g 全域;/c 確認;/i 忽略大小寫;/I 區分大小寫;/e 不報錯;/n 統計

:%s/\bfoo\b/bar/gc — 把整個詞 "foo" 換成 "bar",逐個確認
:g/pat/d / :v/pat/m$

對匹配行執行操作::g/pat/d 刪除匹配行;:v/pat/m$ 把不符合的行移到檔尾。

:v/^#\|^$/d 刪掉所有註解/空行以外的所有行

緩衝區、頁籤、視窗

:e file / :b<N> / :bn :bp :ls

開啟其他檔案(:e)、列出(`:ls`)、以編號切換緩衝區(`:b 3`)、下一個/上一個(`:bn`/`bp`)。

:e . 檔案總管;:bd 刪除當前緩衝區;:bn! 強制;hidden

:e src/index.ts :ls :b 3 :bp :bn
:sp :vs / Ctrl-w j/k/h/l

水平/垂直分割;Ctrl-w + motion 在視窗間移動。

:vs src/index.ts | Ctrl-w l | Ctrl-w j — 在相鄰窗格作業
:tabnew / gt / gT / :tabclose

想要一頁一工作時可以使用頁籤。

:tabnew README.md gt gT :tabclose :tabonly

檢視與設定

:set nu / :set relativenumber

切換行號;`relativenumber` 顯示與游標的距離(搭配 motion 很讚)。

:set relativenumber && 5j 由你心算行數
:set syntax on / :set filetype=ts

開啟語法高亮/為沒有副檔名的檔案強制指定類型。

:set ft=markdown ; :set bg=dark 切換深色主題
:set paste / :set wrap / :set hlsearch

貼上相關:paste 關閉自動縮排。hlsearch 持續顯示高亮。

:noh 立即清除高亮

:set paste 後再 i<Ctrl-r>+(在某些終端機上)

視覺與區塊模式

v / V / Ctrl-v

視覺/行視覺/區塊視覺——區塊模式可編輯文字的整欄。

v -> o 在視覺模式中切換選取端點

Ctrl-v 5j I // Esc — 為 6 行的開頭加上 //(經典的註解/取消註解)
gv / o (in visual)

重新選取上一次的視覺範圍;`o` 切換選取的作用端。

做一個區塊選取、改東西,再用 . 重做一次同樣的編輯

寄存器與巨集

"ayy / "ap / :reg

用命名寄存器 a 複製,再從 a 貼上。:reg 列出所有寄存器。

"0 上次 yank;"_ 黑洞;"+ 系統剪貼簿(若有 +clipboard)

"ayy "ap ; :reg 列出命名、0、+、*
q<reg> ... q / @<reg> / @@

把巨集錄進寄存器 <reg>,用 @<reg> 重播;@@ 重播最近一次巨集。

qa I" <Esc> $ " <Esc> q 5j @a — 為多列儲存格加上引號

外部整合

:!cmd / :r !cmd

在 Vim 內執行 shell 指令;:r !cmd 會把輸出插入檔案。

:r !date ; :!%:clean :r ...
:r file / :source file.vim

把檔案內容讀到游標處;:source 執行 Vim 腳本(.vimrc、插件檔)。

:r ~/.vimrc 把整份設定貼上;:runtime! syntax/foo.vim
:help <topic>

Vim 內建說明文件很豐富。`Ctrl-]` 跳到游標下的 tag。

:help gq :help motion.txt :help :terminal — 開啟 Vim 內終端機(8.0+)
:terminal

開啟內嵌終端機(Vim 8+/Neovim)。

:vert terminal 垂直分割;:term bash;Ctrl-w N 離開 terminal 模式

:vert term bash :resize 15 && 即時跑測試

速查頁版本 1.0.0

適用於 Vim 9 / Neovim 0.9+