Vimチートシート
Vim/Neovimでよく使うキー操作・コマンドを目的別にまとめた一覧です。うろ覚えのコマンドを思い出したいとき、このページをブックマークしてCtrl-Fで検索するのが一番早いです。各項目には、背景や具体例まで踏み込んだ詳細記事へのリンクを付けています。まだVimを触り始めたばかりの人は、先に最低限の使い方と標準チュートリアルから始めると分かりやすいです。
検証環境:macOS 26.4 + Vim 9.1.1752 / Neovim 0.12.4。表に並ぶ71行のキーとコマンドは、この2つで1行ずつ実際に打って確かめました。両者で結果が変わる行と、既定の設定のままでは効かない行には、表の中にその旨を書いています。
目次(16項目)
モード切替
打ったはずの文字が本文に入らず、コマンドとして解釈されたときに最初に見る群です。Iは行の1桁目ではなく最初の非空白文字の前から始まるので、インデントのある行では0iと着地点が変わります。
| キー | 動作 |
|---|---|
| i / a | 挿入モードへ(カーソル位置の前/後) |
| I / A | 最初の非空白文字の前/行末から挿入モードへ |
| Esc / Ctrl-[ | ノーマルモードへ戻る(詳細) |
| v / V / Ctrl-v | ビジュアル/行/矩形選択モード |
| R | 置換モード |
: | コマンドラインモード |
-R / view | 読み取り専用で開く(編集はW10の警告どまりで止まらない、詳細) |
カーソル移動
1行の中と、隣の語までを動く群です。w系とW系の違いは記号を区切りとして数えるかどうかだけで、foo-bar bazのような行でwはハイフンで止まり、Wは空白まで一気に飛びます。
| キー | 動作 |
|---|---|
h j k l | 左・下・上・右(矢印キーとの比較) |
| w b e ge | 単語単位の移動(記号も区切りにする) |
| W B E gE | 単語単位の移動(空白のみ区切り、詳細) |
| f{c} F{c} t{c} T{c} | 行内の文字検索移動 |
| ; , | 直前のf/t系移動を繰り返す(詳細) |
| 0 ^ $ | 行頭・最初の非空白文字・行末(詳細) |
画面移動・ジャンプ
ファイルの中を大きく飛ぶ群です。ここはVimとNeovimで結果が割れる場所で、行を単位に動くgg G Ctrl-d Ctrl-f は、Vimでは移動先の行頭へ寄り、Neovimでは元の桁のまま縦に動きます('startofline'の既定値が逆になっているためです)。
| キー | 動作 |
|---|---|
| gg G {n}G | ファイル先頭・末尾・n行目へ(Neovimは桁を保つ) |
| Ctrl-f Ctrl-b | 1画面下/上へスクロール(Neovimは桁を保つ) |
| Ctrl-d Ctrl-u | 半画面下/上へスクロール(Neovimは桁を保つ、詳細) |
| % | 対応する括弧へジャンプ |
| m{a} '{a} | マークを設定・その行の先頭へ移動(詳細) |
| gd gD | 宣言位置へジャンプ(関数内の最初/ファイル全体の最初、詳細) |
| gf | カーソル下のパスをそのまま開く(詳細) |
削除・変更・コピー
編集の手数がいちばん減るのがこの群です。cwは語の途中から使うとそこから語末までしか変わらないので、語をまるごと打ち直したいときはciwを選びます。
| キー | 動作 |
|---|---|
| x X | カーソル位置/前の1文字を削除 |
| dd D | 行削除/カーソルから行末まで削除 |
| dw cw | 単語削除・変更(モーション基準) |
| ciw | 単語全体を変更(カーソル位置に依存しない、cwとciwの違い / cwとdwの違い) |
| yy yw | 行・単語をヤンク(コピー) |
| p P | カーソルの後/前に貼り付け |
| s | 1文字を変更(実質cl、詳細) |
| . | 直前の変更を繰り返す(詳細) |
| u Ctrl-r | アンドゥ・リドゥ(詳細) |
| >> << | インデントを増減(詳細) |
| gU gu ~ | 大文字・小文字変換(詳細 / u/Uの二重の意味) |
検索
探して飛ぶだけでなく、探した範囲をそのまま削除や変更の対象にできるのがVimの検索です。検索語のハイライトはVimの既定では出ない('hlsearch'が無効で、defaults.vimもこれを有効にしません)ので、:nohの出番があるのは自分で有効にした場合とNeovimです。
| キー/コマンド | 動作 |
|---|---|
/{pattern} ?{pattern} | 前方・後方検索(詳細) |
| n N | 次・前の一致へ移動 |
| * # | カーソル下の単語を前方・後方検索(詳細) |
:noh | 検索ハイライトを一時解除(Vimは'hlsearch'を有効にしてから、詳細) |
| cgn | 直前の検索結果を変更対象にする(詳細) |
| c/ d/ y/ | 検索モーションと組み合わせて変更・削除・ヤンク(詳細) |
| Ctrl-r Ctrl-w | 検索コマンドラインでカーソル下の単語を補完(詳細) |
置換
1行だけか、ファイル全体か、範囲の書き方を変えるだけで同じ形が通ります。Neovimは打ち込んでいる途中から置換後の姿を本文に重ねて見せます('inccommand'の既定がnosplit)が、Vimにこのオプションはありません。
| コマンド | 動作 |
|---|---|
:s/old/new/ | 現在行の最初の一致を置換 |
:%s/old/new/g | ファイル全体を一括置換(活用集) |
:%s/old/new/gc | 1件ずつ確認しながら置換 |
\{-} | 最短マッチの正規表現(詳細) |
:sort :sort u | 行を並べ替える/並べ替えて重複を消す(詳細) |
:uniq | 並べ替えずに、隣り合った重複だけを消す(Vimに後から入ったコマンド、詳細) |
ウインドウ
同じファイルの離れた場所を並べたいときと、2つのファイルを見比べたいときに使います。Ctrl-wのあとの1文字は、小文字ならカーソルが動き、大文字ならウインドウそのものがその方角へ動く、という分かれ方をします。
| キー/コマンド | 動作 |
|---|---|
:split :vsplit | 水平・垂直分割(詳細) |
| Ctrl-w + hjkl | ウインドウ間を移動(詳細) |
| Ctrl-w r/x/K/J/H/L | 入れ替え・レイアウト変更(詳細) |
| Ctrl-w +/-/</>/= | サイズ変更(詳細) |
| Ctrl-w o | 他のウインドウを全部閉じる(詳細) |
:close | ウインドウを閉じる(4つの閉じ方の違い) |
タブ・バッファ
開いたファイルはバッファとして残り、ウインドウとタブはそれを映す枠にすぎません。:lsの左端に出る番号がそのまま:b{n}の引数になるので、この2つは組で使います。
| コマンド | 動作 |
|---|---|
:tabnew :tabnext :tabclose | タブの作成・切替・終了(詳細) |
:ls | バッファ一覧を表示(記号の読み方) |
:bnext :bprev :b{n} | バッファを切り替える |
:windo :bufdo :tabdo | 開いている全体に一括でコマンド実行(詳細) |
| - | バッファ・ウインドウ・タブの違い(詳細) |
レジスタ・マクロ
コピーしたはずの内容が次の削除で消えていたときに開く群です。無名レジスタは削除でも上書きされますが、"0には直前のヤンクだけが入るので、削除をはさんだあとでも貼り直せます。
| キー/コマンド | 動作 |
|---|---|
"a + p / Ctrl-r a | 名前付きレジスタの貼り付け(ノーマル/インサート、全種類一覧) |
"0 | 直近のヤンク専用レジスタ(削除の影響を受けない) |
| "_dd | ブラックホールレジスタで他のレジスタを汚さず削除 |
| q{a} ... q / @a | マクロの記録・実行(詳細) |
ファイル操作
保存と終了、それに外部で書き換わったファイルの取り込みです。:qは未保存の変更があるとE37で止まりますが、:q!はその変更を確認なしで捨てるので、この2つは打つ前にどちらなのかを意識しておきます。
| コマンド | 動作 |
|---|---|
:w :q :wq :q! | 保存・終了・保存して終了・強制終了 |
:e! | 外部で変更されたファイルを再読込(詳細) |
:r {file} | 別ファイルの内容をカーソル位置に挿入(詳細) |
| Ctrl-x Ctrl-f | インサートモードでファイルパスを補完(詳細) |
:oldfiles | 最近開いたファイルの履歴を表示(実体はviminfo/shada。無効だと空、詳細) |
折りたたみ
長いファイルの読まない部分を畳んで、構造だけを眺めるための群です。既定の'foldmethod'はmanualで折りたたみは1つも無い状態から始まるので、まずzfで範囲を作らないと残りのキーは何も起こしません。
設定・ヘルプ
設定が効かないときと、キーを思い出せないときに開きます。:mapには自分で書いた分だけでなく標準添付のプラグインが定義したものも並ぶので、身に覚えのない割り当ての出どころを探すときは:verbose mapまで打ちます。
| コマンド | 動作 |
|---|---|
:help {topic} | ヘルプを引く(効率的な検索方法) |
:set {option} | オプションを設定(現在値の確認方法) |
:map :verbose map | キーマッピングの一覧・定義元を確認(詳細) |
| <Leader> | 独自キーマッピング用の起点キー(詳細) |
覚える順番を決める
一覧を上から順に覚えようとすると、まず続きません。編集で困っている場面から逆に引くのが実用的です。移動に時間がかかっていると感じるなら「カーソル移動」と「画面移動・ジャンプ」、消して打ち直す手数が多いと感じるなら「削除・変更・コピー」から見てください。
目安として、1日に1つか2つだけ選んで、その日の作業の中で意識して使います。使う場面が来なかったキーは、そもそも自分の作業では出番が無いということなので、覚えなくて構いません。
この一覧は71行ありますが、上から順に潰していく読み方には向きません。ここに並んでいるのは「思い出すための索引」であって「習得すべき課題表」ではないので、覚えていない行が残っていること自体は問題になりません。
手元のVimで引く方法
この一覧に載っていないキーを調べたくなったら、Vimに同梱されているヘルプが最も確実です。モードごとに項目が分かれているので、接頭辞を付けて引きます。
:help i_CTRL-R " 挿入モードの Ctrl-r
:help v_o " ビジュアルモードの o
:help :s " Exコマンドの :s
:help 'shiftwidth' " オプションはクォートで囲む
接頭辞まで思い出せないときは、途中まで打ってTabを押すと候補が並びます。:help i_CTRL-まで打ってTabを押せばi_CTRL-Aやi_CTRL-Dが一覧で出ますし、存在しない項目を打った場合はE149が返るので、綴りの誤りはその場で分かります。
キーそのものを忘れて機能だけ覚えている場合は、:helpgrepでヘルプ全体の本文を検索します。結果はquickfixリストに入るので、:copenで一覧を開き、:cnextで次の候補へ進みます。
この記事を書き直すときに引っかかったのが、:helpgrepが本文をそのまま正規表現として扱う点です。ブラックホールレジスタの説明を出そうとして:helpgrep blackholeと打ったところE480: No matchで1件も返らず、コマンドのほうを疑いました。ヘルプの表記はblack holeと2語に分かれていて、:helpgrep black holeに直した途端に4件出ました。
ヘルプの本文で|gui-mouse-select|のように縦棒で囲まれた語にカーソルを置いてCtrl-]を押すと、その項目へ飛べます。戻るのはCtrl-oで、ヘルプは分割ウインドウで開くので、読み終わったら:qでその窓だけ閉じます。
引き方の詳しい説明はヘルプの使い方にまとめています。
手を動かして覚えるなら
一覧を眺めるだけでは指が動くようになりません。ブラウザ上で動くVim道場を用意しているので、章ごとに実際にキーを打ちながら確かめられます。インストールもログインも要りません。
手元のVimで練習したい場合は、同梱のチュートリアルから始める方法もあります。vimtutor jaと打てば日本語版が開き、壊しても構わないコピーの上で演習できます。
Neovimなら:Tutorでも同じ演習が開きます。手元の環境では引数なしで日本語版が選ばれました。
次に読むなら
Vim標準の演習で手を動かして定着させたいならvimtutor/:Tutor、なぜVimを選ぶのかを整理したいならなぜVimmerはVimを使い続けるのか、実際に予測しながら練習したいならオペレータ+モーション練習ドリルも参照してください。