vim のデフォルトキーマッピングのチートシート（ノーマルモード）

# ノーマルモードのデフォルトのキーマッピング一覧

**デフォルトのキーマッピングを一言で説明した表です**

- `<C-a>` は `コントロールキー + a` という意味です．
- `g`, `z`, `Z`, `[`, `]`, `<c-w>` は続くキー次第で内容が多岐にわたるので prefix とさせていただきました
- word は空白もしくはアンダーバーを除く特殊文字で区切られたひと単語でを表現していて， WORD は空白区切りのひとまとまりを表現しています．
- `c`, `d`, `y` は続くオペレーター（テキストオブジェクトや移動コマンド）によって動作が変わるので, 共通する動作 `change`, `delete`, `yank` と書きました．


| キー                     | 内容                      |
|:-----------------------:|:-----------------------------|
| `a`                     | カーソルの後ろに挿入         |
| `A`                     | 行末に挿入                   |
| `<C-a>`                 | インクリメント               |
| `b`                     | word のはじめに後方移動      |
| `B`                     | WORD のはじめに後方移動      |
| `<C-b>`                 | 1ページ上にスクロール        |
| `c`                     | change                       |
| `C`                     | 行末まで変更                 |
| `<C-c>`                 | 現在の（検索）コマンドを中止 |
| `d`                     | delete                       |
| `D`                     | 行末まで削除                 |
| `<C-d>`                 | 半ページ下にスクロール       |
| `e`                     | word の終わりに前方移動      |
| `E`                     | WORD の終わりに前方移動      |
| `<C-e>`                 | ページを下に1行スクロール    |
| `f`                     | 指定した char へ前方移動     |
| `F`                     | 指定した char へ後方移動     |
| `<C-f>`                 | 1ページ下にスクロール        |
| `g`                     | prefix                       |
| `G`                     | 指定した行へジャンプ         |
| `<C-g>`                 | ステータスを表示             |
| `h`                     | カーソルを左へ移動           |
| `H`                     | 画面の1番上の行に移動        |
| `<C-h>`                 | カーソルを左に移動           |
| `i`                     | カーソルの前に挿入           |
| `I`                     | 行頭に挿入（非空白）         |
| `<C-i>`                 | `<Tab>` と同じキーコード     |
| `j`                     | カーソルを下に移動           |
| `J`                     | カーソル行と下の行を結合     |
| `<C-j>`                 | 1行下に移動                  |
| `k`                     | カーソルを上に移動           |
| `K`                     | カーソル下の word を man     |
| `<C-k>`                 | ダイグラフの入力             |
| `l`                     | カーソルを右へ移動           |
| `L`                     | 画面の1番下の行に移動        |
| `<C-l>`                 | 画面を再描画                 |
| `m`                     | マーク                       |
| `M`                     | 画面の中央に移動             |
| `<C-m>`                 | `<CR>` と同じキーコード      |
| `n`                     | 前方の検索結果に移動         |
| `N`                     | 後方の検索結果に移動         |
| `<C-n>`                 | 次の行に移動                 |
| `o`                     | カーソル行の下に行を挿入     |
| `O`                     | カーソル行の上に行を挿入     |
| `<C-o>`                 | 前のジャンプ位置にジャンプ   |
| `p`                     | 前方にペースト               |
| `P`                     | 後方にペースト               |
| `<C-p>`                 | 前の行に移動                 |
| `q`                     | マクロ登録                   |
| `Q`                     | Ex モードに切り替え          |
| `<C-q>`                 | ビジュアル矩形モード         |
| `r`                     | 1文字置き換え                |
| `R`                     | 置き換えモード               |
| `<C-r>`                 | やり直し                     |
| `s`                     | 1文字削除して挿入モード      |
| `S`                     | 1行削除して挿入モード        |
| `<C-s>`                 | 特になし?                    |
| `t`                     | 指定した char の前へ前方移動 |
| `T`                     | 指定した char の後へ後方移動 |
| `<C-t>`                 | 次のタグにジャンプ           |
| `u`                     | 取り消し                     |
| `U`                     | 変更ありの取り消し           |
| `<C-u>`                 | 半ページ上にスクロール       |
| `v`                     | ビジュアルモード             |
| `V`                     | 1行ビジュアルモード          |
| `<C-v>`                 | 矩形ビジュアルモード         |
| `w`                     | word のはじめに前方移動      |
| `W`                     | WORD のはじめに前方移動      |
| `<C-w>`                 | ウィンドウ関連の prefix      |
| `x`                     | カーソル下の文字を削除       |
| `X`                     | カーソルの前の文字を削除     |
| `<C-x>`                 | ディクリメント               |
| `y`                     | yank                         |
| `Y`                     | 1行ヤンク                    |
| `<C-y>`                 | ページを上へ1行スクロール    |
| `z`                     | prefix                       |
| `Z`                     | prefix                       |
| `<C-z>`                 | vim をサスペンド             |
| `<Esc>`                 | `<Esc>`                      |
| `<Tab>`                 | 次のジャンプ位置にジャンプ   |
| `<S-Tab>`               | 特になし?                    |
| `<BS>`                  | カーソルを左に移動           |
| `<CR>`                  | 下の行頭の非空白文字に移動   |
| `<Space>`               | カーソルを右に移動           |
| `!`                     | 外部のプログラムを実行       |
| `@`                     | マクロの再生                 |
| `#`                     | カーソル下の単語を後方検索   |
| `$`                     | 行末に移動                   |
| `%`                     | 対応するかっこに移動         |
| `^`                     | 行頭に移動（非空白）         |
| `&`                     | 置き換えを繰り返す           |
| `*`                     | カーソル下の単語を前方検索   |
| `(`                     | 文後方に移動                 |
| `)`                     | 文前方に移動                 |
| `0`                     | 行頭に移動（空白でも）       |
| `-`                     | 上の行頭の非空白文字に移動   |
| `_`                     | -1 行下の非空白文字に移動    |
| `=`                     | インデントを揃える           |
| `+`                     | 下の行頭の非空白文字に移動   |
| `\`                     | デフォルト `<LocalLeader>`   |
| <code>&#124;</code>     | カーソル行の指定した列へ移動 |
| <code>&#096;</code>     | マーク位置へジャンプ         |
| `~`                     | 大文字，小文字を切り替え     |
| `[`                     | 後方移動系コマンドの prefix  |
| `]`                     | 前方移動系コマンドの prefix  |
| `{`                     | 段落後方に移動               |
| `}`                     | 段落前方に移動               |
| `;`                     | `f char` の順方向繰り返し    |
| `:`                     | コマンドラインモード         |
| `'`                     | マーク位置の行頭へジャンプ   |
| `"`                     | レジスタの指定               |
| `,`                     | `f char` の逆方向繰り返し    |
| `.`                     | 繰り返し                     |
| `<`                     | インデントを左にずらす       |
| `>`                     | インデントを右にずらす       |
| `/`                     | 前方検索                     |
| `?`                     | 後方検索                     |
| `<Down>`                | カーソルを下に移動           |
| `<Up>`                  | カーソルを上に移動           |
| `<Right>`               | カーソルを右に移動           |
| `<Left>`                | カーソルを左に移動           |
| `<S-Down>`              | 1ページ下にスクロール        |
| `<S-Up>`                | 1ページ上にスクロール        |
| `<S-Right>`             | word のはじめに前方移動      |
| `<S-Left>`              | word のはじめに後方移動      |
| `<C-Down>`              | 特になし                     |
| `<C-Up>`                | 特になし                     |
| `<C-Right>`             | WORD のはじめに前方移動      |
| `<C-Left>`              | WORD のはじめに後方移動      |
| `<C-S-Down>`            | 特になし                     |
| `<C-S-Up>`              | 特になし                     |
| `<C-S-Right>`           | 特になし                     |
| `<C-S-Left>`            | 特になし                     |
| `<C-@>`                 | `<C-Space>` と同じキーコード |
| `<C-[>` `<C-#>`         | `<esc>` と同じキーコード     |
| `<C-\>` `<C-$>`         | 特になし?                    |
| `<C-]>` `<C-%>`         | カーソル下の定義にジャンプ   |
| `<C-^>`                 | 1個前のファイルに戻る        |
| `<C-_>` `<C-&>` `<C-/>` | 特になし?                    |
| `<C-*>`                 | `<BS>` と同じキーコード      |

# デフォルトのマッピングを調べる方法

コマンドラインで以下のコマンドを実行すればそのキーにどのような処理が割り当てられているか調べることができます．ちなみに `h` は `help` という意味です．

以下のコマンドでノーマルモードで `q`   `Q`  `<C-q>`  `<Tab>` を押したときの動作が調べられます．

```vim
:h q
:h Q
:h CTRL-q
:h <Tab>
```

以下のコマンドでインサートモードで `<C-q>`  `<Tab>` を押したときの動作が調べられます．
（当たり前ですがインサートモードで `q` `Q` を押したときは `q` `Q` が入力されます）

```vim
:h i_CTRL-q
:h i_<Tab>
```

ビジュアルモードは上のコマンドの `i_` の部分を `v_` に変えれば調べることができます．
コマンドラインモードについても `c_` に変えれば調べることができます．

# マッピングについて

vim は `~/.vimrc` に以下のような記述を（もしくはコマンドラインで実行）することで
`<キー>` を押したときに `<処理>` を実行することができます．

```vimscript
" ノーマルモード
nnoremap <キー> <処理>
" インサートモード
inoremap <キー> <処理>
" ヴィジュアルモード
xnoremap <キー> <処理>
" コマンドラインモード
cnoremap <キー> <処理>
```

詳しくは[日本語ドキュメント](https://vim-jp.org/vimdoc-ja/map.html)を参照して欲しいのですが，ともかくあるキーに特定の処理をさせることができます．

`nnoremap` を `nmap` とすると `<処理>` が再マップされ，マップを入れ子にしたり再帰的にすることができます．

しかし vim にはデフォルトでほとんどのキーに動作が割り振られています．よって自分のオリジナルマッピングの際にどのキーを使えばいいのかがわかりにくいです．表で使わないなと判断したキーにマッピングを割り振るといいと思います．