Vimビギナーが纏める基礎コマンド


## Vinの操作スタイルについて
Vimには4つのモードがあり、それぞれのモードを切り替えて編集します。 
モードはコマンドを使って切り替える事ができます。

| コマンド |                   効果 |
| :------- | :--------------------- |
| Esc        | ノーマルモードへ移行 |
| i, a        | インサートモードへ移行 |
| v        | ビジュアルモードへ移行 |
| :        | コマンドモードへ移行 |
    
## ノーマルモード
ノーマルモードではカーソル移動を基本にコピペや削除を行えます。
### カーソル移動 (文字単位)
| コマンド |                   効果 |
| :------- | :--------------------- |
| h        | 左に移動する |
| j        | 下に移動する |
| k        | 上に移動する |
| l        | 右に移動する |

### カーソル移動 (単語単位)
| コマンド    | 効果                                           |
| :---------- | ---------------------------------------------- |
| w, W        | 次の単語の先頭に移動する             |
| e, E        | 今の単語の末尾に移動する             |
| ※WとEの補足 | 空白に挟まれた文字を一単語として認識する       |
| %           | カーソル位置にある括弧に対応した括弧に移動する |

### カーソル移動 (行単位)
| コマンド | 効果                               |
| :------- | ---------------------------------- |
| 0        | 行頭に移動する           |
| $        | 行末に移動する           |
| gg       | ファイルの先頭行に移動する |
| G        | ファイルの最終行に移動する |
| H        | スクリーンの最上行に移動する |
| M        | スクリーンの中央に移動する |
| L        | スクリーンの最下行に移動する |

### 削除
| コマンド |                   効果 |
| :------- | :--------------------- |
| dw       | 単語を削除する(空白含む) |
| de        | 単語を削除する(空白含まない) |
| dd        | 行を削除する |
| D        | カーソルより後の文字を削除する |

### コピペ
| コマンド |                   効果 |
| :------- | :--------------------- |
| yw       | 単語をコピーする(空白含む) |
| ye        | 単語をコピーする(空白含まない) |
| yy, Y        | 現在行をコピーする |
| p        | 下の行に貼り付ける |
| P        | 上の行に貼り付ける |


## インサートモード
インサートモードでは文字の挿入を行えます。
### 挿入
| コマンド |                   効果 |
| :------- | :--------------------- |
| i        | カーソルの左からインサートモードに入る |
| a        | カーソルの右からインサートモードに入る |
| I        | 行頭からインサートモードに入る |
| A        | 行末からインサートモードに入る |
| o        | 下に行を追加しインサートモードに入る |
| O        | 上に行を追加しインサートモードに入る |

### 置き換え
| コマンド |                   効果 |
| :------- | :--------------------- |
| r       | 1文字置き換える |
| R       | 1文字以上置き換える |
| cw        | 単語を置き換える |

## ビジュアルモード
ビジュアルモードでは選択範囲を指定し、対象に操作を行えます。
ビジュアルモードの中にもモードが3つあり、場面に応じて使い分けます。
| コマンド | 選択モード  | コマンド |
| :------- | :---------- | :------- |
| v        | VISUAL      | 文字選択         |     
| V        | VISUAL LINE | 行選択        |
| ctrl + v | VISUAL BLOCK | 短形選択   |

### 選択する
| コマンド | 効果               |
| :------- | :----------------- |
| vh, vl   | 一文字ずつ選択する |
| ve, vE   | 1単語ずつ選択する  |
| Vj, Vk   | 一行ずつ選択する   |
| V5gg, V5G | 5行目まで纏めて選択する |
| ctrl + v → j0I | 計2行の先頭に文字を挿入する |

### 選択範囲に操作する
| コマンド |                   効果 |
| :------- | :--------------------- |
| vd       | 選択範囲を削除する |
| vc       | 選択範囲を削除してインサートモードに入る |
| vy       | 選択範囲をコピーする |
| vp       | 選択範囲の文字をコピーに置き換える |

## コマンドモード
コマンドモードでは文字検索やファイル操作等、他にも様々な操作が行えます。
### 文字検索
| コマンド |                   効果 |
| :------- | :--------------------- |
| :/word        | 'word'を検索する |
| (検索中に) n        | 下向きに次の検索 |
| (検索中に) N        | 上向きに次の検索 |
| :s/old/new/g        | 現在行の'old'を'new'に置き換える |
| :%s/old/new/g        | ファイル上の全ての'old'を'new'に置き換える |

### ファイル操作
| コマンド |                   効果 |
| :------- | :--------------------- |
| :q       | Vimを終了する |
| :w        | ファイルを保存する |
| :wq        | ファイルを保存してVimを終了する |

## 個人的によく使うコマンドの組み合わせ
コマンドを組み合わせる事で効率よく操作を行う事が出来ます。
| コマンド        | 効果                                           |
| :-------------- | :--------------------------------------------- |
| 5gg, 5G             | 行番号を指定して移動する                       |
| o<Esc>          | 下に空行を追加する                       |
| Vc              | 現在行の文字を全て削除して新たに文字を挿入する |
| cE              | 単語の終わりまで削除してインサートモードに入る |
| yE             | 単語の終わりまでコピーする                     |
| yyp, Yp             | 現在行をコピーし下に挿入する                     |
| vep             | 選択範囲の文字とコピーした文字を置き換える     |
| ctrl + v → 5j0I | 計6行の先頭に文字を挿入する      |

## Vimに慣れるために
- vimtutorを行う
    - macであればターミナルに`vimtutor`を入力すると起動する
    - 2〜3周してコマンドに慣れる
- 作業環境をvimに染める
    - 自分の場合はvscodeにvimのプラグインを入れ、毎日vimを使う環境にしました。
- アウトプットをvimで行う
    - この記事もvimを使用して作成しています。とにかく慣れるまで使いましょう。