すべてのチートシート

Vim チートシート

Vim / Neovim を素早く参照:モード、カーソル移動、編集、検索 / 置換、複数ファイル操作、レジスタ / マクロ、ビジュアル ブロック編集 — よく使う移動の短い例も掲載。

37 コマンド

モード / 保存

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

保存、終了、保存して終了、保存せず強制終了。

:w file(名前を付けて保存); :w!(強制); :x(変更時のみ保存して終了); :qa! 全ウィンドウ強制終了; :wqa

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

挿入モードへ:i でカーソル前 / a で後ろ、o / O で下 / 上に新行、I / A は行頭 / 行末。

i edit here => o new line + insert => I line-beginning => A line-end
<Esc> / Ctrl-[

ノーマル モードへ戻る(Ctrl-c / Ctrl-[ でも可)。点滅で待機中のオペレータをキャンセル。

i Hello<Esc> ; then :w

カーソル移動

h / j / k / l

1 文字左 / 下 / 上 / 右へ移動。(矢印キーでも可。)

5j — move 5 lines down
w / b / e / W / B / E

単語単位で移動(記号 / 空白を区切り);W / B / E は空白区切りの単語。

wdw ; 3W to third whitespace-word forward
0 / $ / ^

行頭 / 行末 / 行頭の非空白文字。

0 to start ; $ to end ; ^ to first non-blank
gg / G / :N

最初の行 / 最後の行 / N 行目へジャンプ。`50%` で割合指定移動。

gg=G format the entire file (with =)
H / M / L / Ctrl-d / Ctrl-u

画面の上 / 中央 / 下(H / M / L);半ページ下(Ctrl-d)/ 上(Ctrl-u)。

Ctrl-d and Ctrl-u to scan; 10Ctrl-f full page forward
{ / } / ( / )

段落({ / })または文(ASCII テキストで ( / ))単位のジャンプ。

5{ ; 2} to jump two paragraphs forward
f<char> / F<char> / t / T ; ; / ,

行内の指定文字を前 / 後ろへ検索(f / F);`;` / `,` で繰り返し。t / T は 1 つ手前で停止。

f, brings the cursor to the next comma ; df, deletes through next comma

挿入モード

Ctrl-h / Ctrl-w / Ctrl-u

入力中のバックスペース / 単語削除 / 行削除 — コーディング時の vim を快適に。

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

ノーマル モードのコマンドを 1 回実行(Ctrl-o);レジスタを挿入(Ctrl-r)。

Ctrl-r =expr でその場で式を評価

Ctrl-r " the unnamed register ; Ctrl-r 0 from the yank register ; Ctrl-r =5+5 to insert 10

編集オペレータ

d / x / X / c

削除 / カーソル下の 1 文字削除 / 直前 1 文字削除 / 変更(削除 + 挿入開始)。モーションと組合せ:dw / xp / c$。

dd 行を削除; cc 行を変更; D 行末まで削除; C 行末まで変更

dw | dw$ | dw | 3dd | C reformat current line
y / yy / Y

ヤンク(コピー)。yy / Y で現在行をヤンク;y$ / yW 等はモーションを取ります。

y2w yy p gp — yank 2 words, line, paste, paste below without moving cursor
p / P / gp / gP

カーソル後(p)/ 前(P)に貼り付け。gp / gP は貼り付けテキスト末にカーソルを残す。

p below current ; P above ; gp after, cursor at end
u / Ctrl-r / U

取り消し / 再実行(Ctrl-r)。U は行を元の状態に戻す(繰り返し回数有利のため非推奨)。

u u u ; Ctrl-r Ctrl-r ; 5u to undo last 5 changes
. / @: / q:

直前の編集(.)を繰り返す — 非常に強力。@: は直近マクロを繰り返し、q: はコマンド履歴を開きます。

i Monday<Esc> ; then . . . . across several lines
r / R / J / gq

1 文字置換(r<char>)/ 置換モード(R)/ 行連結(J、gJ はスペースなし)/ 整形(gq{モーション})。

raZ to change one char ; J to join ; gqap format the current paragraph

インデント

>> / << / = / :set autoindent

インデント追加 / 削除 / 自動整形(=)。モーションと組合せ:=G(末尾まで)、`gg=G` で全ファイル。

5>> indent 5 lines ; =ap auto-indent paragraph ; gg=G format buffer (whole file)

検索 / 置換

/pat / ?pat / n / N

前方(/) / 後方(?)に検索;n / N で同じ / 逆方向に繰り返し。

/\<word\> 単語境界; \v very-magic 正規表現; \c 大文字小文字無視; \C 大文字小文字区別

/TODO\c ; n next ; N previous ; * / # to search the word under cursor
* / # / g* / g#

カーソル位置の単語を検索:* で前方(# で後方)。g* は境界隣接も含める。

Hover on foo then * — jumps to next foo, n continues
:%s/pat/rep/g / :5,12s/foo/bar/g

置換 — 全体 / 範囲指定 / フラグ / 1 件毎の確認が可能。

%s / g 全体; /c 確認; /i 大文字小文字無視; /I 大文字小文字区別; /e エラーなし; /n 件数

:%s/\bfoo\b/bar/gc — replace whole word "foo" with "bar", confirm each
:g/pat/d / :v/pat/m$

マッチする行に対する操作::g / pat / d でマッチ行を削除、:v / pat / m$ で非マッチ行を末尾へ移動。

:v/^#\|^$/d delete all comment-blank only lines

バッファ / タブ / ウィンドウ

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

別ファイルを開く(:e)、一覧(:ls)、ID でバッファへ(: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 + モーションでウィンドウ間を移動。

:vs src/index.ts | Ctrl-w l | Ctrl-w j — work in adjacent panes
:tabnew / gt / gT / :tabclose

バッファ毎に 1 タブを使いたいときに。

:tabnew README.md gt gT :tabclose :tabonly

表示 / 設定

:set nu / :set relativenumber

行番号のトグル;`relativenumber` はカーソルからの距離も表示(モーションと相性抜群)。

:set relativenumber && 5j will count in your head
:set syntax on / :set filetype=ts

構文ハイライトを有効化 / 拡張子なしのファイルにファイル タイプを強制指定。

:set ft=markdown ; :set bg=dark for dark mode
:set paste / :set wrap / :set hlsearch

貼り付け切替:paste で挿入時の自動インデントを抑制。hlsearch はマッチを持続表示。

:noh ハイライトを即解除

:set paste then i<Ctrl-r>+ in some terminals

ビジュアル / ブロック モード

v / V / Ctrl-v

ビジュアル / 行ビジュアル / ブロック ビジュアル — ブロックではテキストの列単位で編集可能。

v -> o でビジュアル モード内の選択端トグル

Ctrl-v 5j I // Esc — prepend // to 6 lines (classic comment-uncomment)
gv / o (in visual)

直前のビジュアル範囲を再選択;`o` で選択のアクティブ端を切替。

Make a block selection, change something, run the same edit again with .

レジスタ / マクロ

"ayy / "ap / :reg

名前付きレジスタ a にヤンクし、a から貼り付け。:reg でレジスタ一覧。

"0 直近のヤンク; "_ ブラック ホール; "+ システム クリップボード(+clipboard 有効時)

"ayy "ap ; :reg to list named, 0, +, *
q<reg> ... q / @<reg> / @@

<reg> にマクロを記録し、@<reg> で再生;@@ は直前のマクロを再実行。

qa I" <Esc> $ " <Esc> q 5j @a — quote cells across rows

外部連携

:!cmd / :r !cmd

Vim 内からシェル コマンドを実行;:r !cmd でその出力を挿入。

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

カーソル位置にファイル内容を読み込み;:source は Vim スクリプト(.vimrc、プラグイン ファイル)を実行。

:r ~/.vimrc to paste whole config; :runtime! syntax/foo.vim
:help <topic>

Vim のオフライン ヘルプは充実。`Ctrl-]` でカーソル位置のタグへジャンプ。

:help gq :help motion.txt :help :terminal — open terminal-in-vim (8.0+)
:terminal

埋め込みターミナルを開く(Vim 8+ / Neovim)。

:vert terminal で垂直分割; :term bash; Ctrl-w N でターミナル モードを抜ける

:vert term bash :resize 15 && run tests live

チートシート バージョン 1.0.0

Vim 9 / Neovim 0.9+ に対応