模式與存檔
:w / :q / :wq / :q!存檔、離開、存檔後離開、強制離開(不存檔)。
:w file(另存新檔);:w!(強制);:x(修改過才存檔離開);:qa! 強制關閉全部;:wqa
:w | :q 或 ZZi / 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+