Vim を使い始めようと思ったからチートシートを作ってみた

# Vim チートシート

## 起動

| コマンド        | 動作                             |
| :-------------- | :------------------------------- |
| vim {path/file} | vim を実行（指定ファイルを開く） |

## 終了

| キー入力 | 動作             |
| :------- | :--------------- |
| :q[uit]  | 終了             |
| :q!      | 終了（編集破棄） |

## ファイル操作

| キー入力              | 動作                                                                                              |
| :-------------------- | :------------------------------------------------------------------------------------------------ |
| :e[dit] {path/file}   | ファイルを開く（相対ファイルパスを入力。[TAB]で補完入力）                                         |
| :e[dit] {path}        | ファイルエクスプローラを指定パスでオープン（[TAB]で補完入力）                                     |
| :e.                   | ファイルエクスプローラをカレントディレクトリでオープン                                            |
| :E[xplore]            | アクティブなバッファのディレクトリでファイルエクスプローラをオープン                              |
| :S[explore]           | :E の水平分割版                                                                                   |
| :Vexplore             | :E の垂直分割版                                                                                   |
| :find                 | ファイルを検索して開く<br />検索先は path に予め設定しておく<br />src配下なら :set path+=src/\*\* |
| :sav[eas] {path/file} | ファイル名を付けて保存                                                                            |
| :w[rite]              | ファイルの上書き保存                                                                              |

## モード切替

### ノーマルモード

| キー入力                | 動作           |
| :---------------------- | :------------- |
| [ESC] <br /> [CTRL] + ] | ノーマルモード |

### インサートモード開始

| キー入力 | 動作                       |
| :------- | :------------------------- |
| i        | カーソル位置から           |
| a        | カーソル位置の後ろから     |
| I        | 行頭から                   |
| A        | 行末から                   |
| o        | カーソル行の下に新規行     |
| O        | カーソル行の上に新規行     |
| C        | カーソル位置から行末を削除 |
| s        | カーソル位置を1文字削除    |
| S        | カーソル行で新規行         |

### 置換モード開始

| キー入力       | 動作       |
| :------------- | :--------- |
| R <br /> [INS] | 置換モード |

### ビジュアルモード開始

※ トグルでノーマルモードと切り替わる

| キー入力   | 動作         |
| :--------- | :----------- |
| v          | 文字指向     |
| V          | 行指向       |
| [CTRL] + v | ブロック指向 |

#### ビジュアルモード中

| キー入力 | 動作                               |
| :------- | :--------------------------------- |
| gv       | 直前の選択範囲を再選択             |
| o        | 選択範囲の始点と終点をトグルで移動 |

## カーソル移動

| キー入力  | 動作                                                             |
| :-------- | :--------------------------------------------------------------- |
| h         | 左                                                               |
| j         | 下                                                               |
| k         | 上                                                               |
| l         | 右                                                               |
| w         | 次の単語の先頭（区切り文字まで）                                 |
| W         | 次の単語の先頭（区切り文字を除く）                               |
| b         | カーソル位置が単語の途中なら、その単語の先頭（区切り文字まで）   |
| B         | カーソル位置が単語の途中なら、その単語の先頭（区切り文字を除く） |
| e         | 単語の末尾（区切り文字まで）                                     |
| E         | 単語の末尾（区切り文字を除く）                                   |
| gg        | ファイルの先頭行                                                 |
| G         | ファイルの末尾行                                                 |
| H         | 画面の先頭行                                                     |
| M         | 画面の中央行                                                     |
| L         | 画面の末尾行                                                     |
| 0         | 行頭                                                             |
| ^         | 行頭（非空白文字）                                               |
| $         | 行末                                                             |
| gm        | 行の中央                                                         |
| g\_       | 行末（非空白文字）                                               |
| %         | 対の括弧                                                         |
| :{number} | number行                                                         |
| ''        | ジャンプ前の位置                                                 |
| '.        | 直前に変更があった位置                                           |
| '^        | 直前に挿入があった位置                                           |
| m{a-zA-Z} | 現在位置をマーク                                                 |
| '{a-zA-Z} | マークした位置                                                   |

### ノーマルモード中の編集

| キー入力   | 動作                         |
| :--------- | :--------------------------- |
| x          | 1文字カット                  |
| dd         | 1行カット                    |
| .          | 直前の変更を繰り返す         |
| yy         | 1行コピー                    |
| p          | ペースト（カーソル位置の後） |
| P          | ペースト（カーソル位置の前） |
| u          | アンドゥ                     |
| [CTRL] + r | リドゥ                       |

### インサートモード中の編集

| キー入力                | 動作                           |
| :---------------------- | :----------------------------- |
| [CTRL] + h              | 直前の1文字削除                |
| [CTRL] + w              | 直前の1単語削除                |
| [CTRL] + u              | 行頭まで削除                   |
| [CTRL] + r, {0-9a-zA-Z} | ペースト（レジスタから）       |
| [CTRL] + r, *           | ペースト（クリップボードから） |

## 検索

### 行内1文字検索

| キー入力 | 動作                |
| :------- | :------------------ |
| f{char}  | 前方検索            |
| t{char}  | 前方検索（1文字前） |
| F{char}  | 後方検索            |
| T{char}  | 後方検索（1文字後） |
| ;        | 次を検索            |
| ,        | 前を検索            |

### ファイル内文字列検索

| キー入力   | 動作                         |
| :--------- | :--------------------------- |
| /{pattern} | ファイル内で前方検索         |
| ?{pattern} | ファイル内で後方検索         |
| *          | カーソル位置の単語を前方検索 |
| #          | カーソル位置の単語を後方検索 |
| n          | 次を検索                     |
| N          | 前を検索                     |

## 置換

### 文字列置換

| キー入力                 | 動作                           |
| :----------------------- | :----------------------------- |
| :[%]s/{pattern}/{string} | 置換（%なし=前方, %あり=全て） |

### 1文字（上書き）

| キー入力 | 動作                          |
| :------- | :---------------------------- |
| r{char}  | 1文字上書き（置換モード）     |
| gr{char} | 1文字上書き（仮想置換モード） |

## インデント

準備
:set shiftwidth=4 softtabstop=4 expandtab

| キー入力 | 動作               |
| :------- | :----------------- |
| >        | インデントを下げる |
| <        | インデントを上げる |
| =        | 自動インデント     |

## ウインドウ

| キー入力      | 動作                                 |
| :------------ | :----------------------------------- |
| [CTRL] + w, s | 水平分割                             |
| [CTRL] + w, v | 垂直分割                             |
| [CTRL] + w, c | アクティブウインドウを閉じる         |
| [CTRL] + w, o | アクティブウインドウだけ残す         |
| [CTRL] + w, T | アクティブウインドウを新規タブに移動 |
| gt            | 次のタブに切替                       |
| gT            | 前のタブに切替                       |

# 参考

- 僕がサクラエディタからVimに乗り換えるまで (https://blog.jnito.com/entry/20120101/1325420213)
- 実践Vim　思考のスピードで編集しよう！ (https://www.amazon.co.jp/dp/B00HWLJI3U/)
- Vim Cheat Sheet (https://vim.rtorr.com/lang/ja)