全般

  • :h[elp] keyword - 「keyword」のヘルプを開く
  • :sav[eas] file - 名前を付けて保存
  • :clo[se] - 現在のペインを閉じる
  • :ter[minal] - ターミナルウインドウを開く
  • K - カーソル下の単語の man ページを開く
Tip ターミナルで vimtutor を実行して最初に Vim コマンドを学びましょう。

カーソル移動

  • h - 左に移動
  • j - 下に移動
  • k - 上に移動
  • l - 右に移動
  • gj - 表示行で1行下に移動
  • gk - 表示行で1行上に移動
  • H - 画面上部に移動
  • M - 画面中央に移動
  • L - 画面下部に移動
  • w - 次の単語の先頭に移動
  • W - 次の(区切り文字を含む)単語の先頭に移動
  • e - 次の単語の末尾に移動
  • E - 次の(区切り文字を含む)単語の末尾に移動
  • b - 前の単語の先頭に移動
  • B - 前の(区切り文字を含む)単語の先頭に移動
  • ge - 前の単語の末尾に移動
  • gE - 前の(区切り文字を含む)単語の末尾に移動
  • % - 対応するカッコに移動(標準でサポートしている組み合わせは: '()', '{}', '[]' - 詳細は :h matchpairs を参照)
  • 0 - 行頭に移動
  • ^ - その行で最初の非空白文字に移動
  • $ - 行末に移動
  • g_ - その行で最後の非空白文字に移動
  • gg - ドキュメントの先頭行に移動
  • G - ドキュメントの末尾行に移動
  • 5gg or 5G - 5行目に移動
  • gd - カーソル位置の語の定義を関数内で探して移動
  • gD - カーソル位置の語の定義をファイル全体で探して移動
  • fx - 次にある文字「x」の手前に移動
  • tx - 次にある文字「x」の 1 つ手前に移動
  • Fx - 前にある文字「x」の手前に移動
  • Tx - 前にある文字「x」の 1 つ後ろに移動
  • ; - 直前の f, t, F, T を繰り返し
  • , - 直前の f, t, F, T を反対にして繰り返し
  • } - 次の段落に移動(コード編集中の場合は関数/ブロック)
  • { - 前の段落に移動(コード編集中の場合は関数/ブロック)
  • zz - カーソル位置を画面中央に
  • zt - position cursor on top of the screen
  • zb - position cursor on bottom of the screen
  • Ctrl + e - 画面を下に 1 行スクロール(カーソル移動なし)
  • Ctrl + y - 画面を上に 1 行スクロール(カーソル移動なし)
  • Ctrl + b - 画面全体分だけ上に移動
  • Ctrl + f - 画面全体分だけ下に移動
  • Ctrl + d - 画面半分だけ下に移動
  • Ctrl + u - 画面半分だけ上に移動
Tip これらのコマンドの前に番号を付けるとその回数分繰り返します。例えば、4j は 4 行下に移動します。

挿入モード - テキストを挿入/追加

  • i - カーソル位置で挿入モード
  • I - その行頭で挿入モード
  • a - カーソルの次の位置で挿入モード
  • A - その行末で挿入モード
  • o - 下に改行してそこで挿入モード
  • O - 上に改行してそこで挿入モード
  • ea - その単語の末尾で挿入モード
  • Ctrl + h - 挿入モード中に手前の文字を消去
  • Ctrl + w - 挿入モード中に手前の単語を消去
  • Ctrl + j - 挿入モード中に改行
  • Ctrl + t - 挿入モード中にその行を(右に)字下げ
  • Ctrl + d - 挿入モード中にその行を(左に)字上げ
  • Ctrl + n - 挿入モード中にカーソルの手前側へ次の候補を挿入(自動補完)
  • Ctrl + p - 挿入モード中にカーソルの後ろ側へ前の候補を挿入(自動補完)
  • Ctrl + rx - レジスタxの内容を挿入
  • Ctrl + ox - 挿入モードからノーマルモードに一時的に移動してコマンドxを実行
  • Esc or Ctrl + c - 挿入モードを終了

編集

  • r - 文字を 1 つだけ置き換え
  • R - ESCが押されるまで1つ以上の文字を置き換え
  • J - スペースを 1 つ加えて下の行を現在の行に連結
  • gJ - スペースなしで現在の行に下の行を連結
  • gwip - 段落をすべて連結
  • g~ - モーション範囲の大文字小文字を切り替え
  • gu - モーション範囲を小文字に
  • gU - モーション範囲を大文字に
  • cc - 現在の行を消去して挿入モード
  • c$ or C - カーソル位置から行末までを消去して挿入モード
  • ciw - 単語を全て消去して挿入モード
  • cw or ce - 単語をカーソル位置から末尾まで消去して挿入モード
  • s - カーソル位置の文字を消去して挿入モード
  • S - 現在の行を消去して挿入モード(ccと同じ)
  • xp - 二文字の入れ替え(カットしてペースト)
  • u - 取り消し(アンドゥ)
  • U - 最後に変更した行を取り消し(アンドゥ)
  • Ctrl + r - やり直し(リドゥ)
  • . - 最後に使ったコマンドを繰り返し

テキスト選択(ビジュアルモード)

  • v - ビジュアルモード開始。これで選択してからコマンド(Y - ヤンクなど)を実行
  • V - 行単位のビジュアルモード
  • o - 選択範囲の反対側に移動
  • Ctrl + v - 矩形ビジュアル
  • O - 矩形の反対側の角に移動
  • aw - 単語を選択
  • ab - () のブロックを選択
  • aB - {} のブロックを選択
  • at - <> タグのブロックを選択
  • ib - () ブロックの括弧を除いた内側を選択
  • iB - {} ブロックの括弧を除いた内側を選択
  • it - <> タグのブロックの括弧を除いた内側を選択
  • Esc or Ctrl + c - ビジュアルモード終了
Tip bB の代わりにそれぞれ ({ も使えます。

ビジュアルモードでのコマンド

  • > - 選択範囲を右に
  • < - 選択範囲を左に
  • y - 選択範囲をヤンク(コピー)
  • d - 選択範囲を消去
  • ~ - 大文字と小文字を入れ替え
  • u - 選択範囲を小文字に
  • U - 選択範囲を大文字に

レジスタ

  • :reg[isters] - レジスタの内容を表示
  • "xy - レジスタ x へヤンク
  • "xp - レジスタ x からペースト
  • "+y - システムクリップボードレジスタへヤンク
  • "+p - システムクリップボードレジスタからペースト
Tip レジスタは ~/.viminfo に保存され、次の再起動時に読み込まれます。
Tip 特殊レジスタ:

0 - 最後のヤンク
" - 無名レジスタ, 最後の削除またはヤンク
% - 現在のファイル名
# - 別のファイル名
* - クリップボードの内容(X11 プライマリ)
+ - クリップボードの内容 (X11 クリップボード)
/ - 最後の検索のパターン
: - 最後のコマンドライン
. - 最後に挿入したテキスト
- - 最後の小さな(一行未満の)消去
= - 数式レジスタ
_ - 空白の消去用レジスタ

マークと位置

  • :marks - マークリスト
  • ma - 現在の位置をマーク「a」に設定
  • `a - マーク「a」に移動
  • y`a - マーク「a」の位置をヤンク
  • `0 - Vim が以前終了したときの位置に移動
  • `" - このファイルを最後に編集した位置に移動
  • `. - このファイルの最後の変更に移動
  • `` - 最後にジャンプした位置の手前に移動
  • :ju[mps] - ジャンプのリスト
  • Ctrl + i - ジャンプリスト内の新しい方の位置に移動
  • Ctrl + o - ジャンプリスト内の古い方の位置に移動
  • :changes - 変更リスト
  • g, - 変更リスト内の新しい方の位置に移動
  • g; - 変更リスト内の古い方の位置に移動
  • Ctrl + ] - カーソル下の単語のタグへ移動
Tip マークへ移動するにはバックティック消去(`)とアポストロフィ(')が使用できます。アポストロフィを使ったジャンプではマークがある行頭(の最初の非空白文字)に移動します。

マクロ

  • qa - マクロ「a」を記録開始
  • q - マクロの記録を停止
  • @a - マクロ「a」を実行
  • @@ - 最後に実行したマクロを再実行

カットとペースト

  • yy - 行をヤンク(コピー)
  • 2yy - 2 行をヤンク(コピー)
  • yw - 次の単語の始まりまでをヤンク(コピー)
  • yiw - その単語全体をヤンク(コピー)
  • yaw - その単語全体と前後のスペースをヤンク(コピー)
  • y$ or Y - 行末までヤンク
  • p - カーソル位置の 1 つ後ろにペースト
  • P - カーソル位置の手前にペースト
  • gp - カーソルの位置の後にペーストしてカーソル位置を新たなテキストの後に
  • gP - カーソルの位置の前にペーストしてカーソル位置を新たなテキストの後に
  • dd - 行を消去(カット)
  • 2dd - 2 行を消去(カット)
  • dw - 次の単語の始まりまでを消去(カット)
  • diw - その単語全体を消去(カット)
  • daw - その単語全体と前後のスペースを消去(カット)
  • :3,5d - delete lines starting from 3 to 5
Tip You can also use the following characters to specify the range:
e.g.

:.,$d - From the current line to the end of the file
:.,1d - From the current line to the beginning of the file
:10,$d - From the 10th line to the beginning of the file

  • :g/{pattern}/d - delete all lines containing pattern
  • :g!/{pattern}/d - delete all lines not containing pattern
  • d$ or D - 行末まで消去(カット)(<kbd>D</kbd>と同じ)
  • x - 文字を 1 つ消去(カット)

テキストインデント

  • >> - その行を(右に)字下げ
  • << - その行を(左に)字上げ
  • >% - () や {} のブロックを字下げ(カーソルが括弧にあるとき)
  • <% - de-indent a block with () or {} (cursor on brace)
  • >ib - () のブロックの内側を字下げ
  • >at - <> タグのブロックを字下げ
  • 3== - 3 行を再インデント
  • =% - () や {} のブロックを再字下げ(カーソルが括弧にあるとき)
  • =iB - {} のブロックの内側を再字下げ
  • gg=G - バッファ全体を再字下げ
  • ]p - ペーストして現在の行にインデントを揃える

終了

  • :w - 終了せずにファイルに書き込み(保存)
  • :w !sudo tee % - sudo を使って現在のファイルに書き込み
  • :wq or :x or ZZ - 書き込み(保存)して終了
  • :q - 終了(未保存の変更があると失敗する)
  • :q! or ZQ - 未保存の変更を破棄して終了
  • :wqa - 全てのタブを書き込み(保存)して終了

検索と置換

  • /pattern - pattern のパターンを検索
  • ?pattern - ?pattern のパターンを逆方向に検索
  • \vpattern - 'very magic' パターン: 非英数字を特別な正規表現文字として扱う(エスケープ不要)
  • n - 順方向に再検索
  • N - 逆方向に再検索
  • :%s/old/new/g - すべての old を new に置換
  • :%s/old/new/gc - すべての old を new に確認しながら置換
  • :noh[lsearch] - 検索結果のハイライトを無効化

複数ファイルを検索

  • :vim[grep] /pattern/ {`{file}`} - 複数ファイルで pattern を検索
e.g. :vim[grep] /foo/ **/*
  • :cn[ext] - 次の一致箇所に移動
  • :cp[revious] - 前の一致箇所に移動
  • :cope[n] - 一致箇所一覧のウインドウを開く
  • :ccl[ose] - クイック修正ウインドウを閉じる

タブ

  • :tabnew or :tabnew {page.words.file} - ファイルを新しいタブで開く
  • Ctrl + wT - 分割ウィンドウをそのタブに移動
  • gt or :tabn[ext] - 次のタブに移動
  • gT or :tabp[revious] - 前のタブに移動
  • #gt - # 番目のタブに移動
  • :tabm[ove] # - 現在のタブを # 番目に移動(0 始まり)
  • :tabc[lose] - 現在のタブを閉じる
  • :tabo[nly] - 現在以外のタブを閉じる
  • :tabdo command - 全てのタブで command を実行(例: :tabdo q - は全てのタブを閉じる)

複数のファイルでの作業

  • :e[dit] file - 新しいバッファでファイルを編集
  • :bn[ext] - 次のバッファに移動
  • :bp[revious] - 前のバッファに移動
  • :bd[elete] - バッファを消去(ファイルを閉じる)
  • :b[uffer]# - # 番目のバッファに移動
  • :b[uffer] file - file という名前のバッファに移動
  • :ls or :buffers - バッファのリストを開く
  • :sp[lit] file - 新しいバッファの水平分割ウィンドウでファイルを開く
  • :vs[plit] file - 新しいバッファの垂直分割ウィンドウでファイルを開く
  • :vert[ical] ba[ll] - 全てのバッファを垂直分割ウインドウにして編集
  • :tab ba[ll] - 全てのバッファをタブにして編集
  • Ctrl + ws - ウィンドウ分割
  • Ctrl + wv - ウィンドウ垂直分割
  • Ctrl + ww - ウィンドウ切り替え
  • Ctrl + wq - ウィンドウ終了
  • Ctrl + wx - 現在のウインドウを次のウインドウと入れ替え
  • Ctrl + w= - 全てのウインドウを同じ高さと幅に
  • Ctrl + wh - 右のウィンドウ(垂直分割)にカーソル移動
  • Ctrl + wl - 左のウィンドウ(垂直分割)にカーソル移動
  • Ctrl + wj - 下のウィンドウ(水平分割)にカーソル移動
  • Ctrl + wk - 上のウィンドウ(水平分割)にカーソル移動
  • Ctrl + wH - 現在のウィンドウの高さを最大化して最も左側に移動
  • Ctrl + wL - 現在のウィンドウの高さを最大化して最も右側に移動
  • Ctrl + wJ - 現在のウィンドウの幅を最大化して最も下側に移動
  • Ctrl + wK - 現在のウィンドウの幅を最大化して最も上側に移動

差分

  • zf - モーション範囲での折りたたみを手動定義
  • zd - カーソル下の折りたたみを消去
  • za - カーソル下の折りたたみを切り替え
  • zo - カーソル下の折りたたみを開く
  • zc - カーソル下の折りたたみを閉じる
  • zr - 全ての折りたたみを 1 段階減らす(開く)
  • zm - 全ての折りたたみを 1 段階折りたたむ(閉じる)
  • zi - 全ての折りたたみを切り替え
  • ]c - 次の変更点の始端に移動
  • [c - 前の変更点の始端に移動
  • do or :diffg[et] - (他のバッファから)差分を取得する
  • dp or :diffpu[t] - (他のバッファへ)差分を送り込む
  • :diffthis - 現在のウインドウを差分モードのひとつに
  • :dif[fupdate] - 差分情報を更新
  • :diffo[ff] - 現在のウインドウの差分モードを無効化
Tip 折りたたみのコマンド(za など)は 1 段階だけ操作します。全段階を操作するには、大文字にします(zAなど)。
Tip ファイルの差分を見るには、ターミナルで vimdiff を直接実行することで Vim を差分モードで起動できます。これは git difftool としても設定できます。