vimの基本操作まとめ

vimについて勉強中で、よく使うまたは使うことが多そうな操作をまとめました。

## vim
vimとはテキストエディタの一つ。CUIで操作する。

vimの使い方を覚える前に、CUIの操作には慣れておいた方がいい。

## vimでできること
マウスを使わずキーボードのみでファイルを編集することができる。

またサーバー内ではGUIのエディタを開けないのでvimのようなCUIのエディタを使う必要がある。

## 基本操作
### vimを起動する
vimを使うにはターミナル（Macの場合）でvimと入力する。
```
vim
```

もしくは、vimで開きたいファイル名を入力する。
```
vim file
```

### モード
vimには、モードという概念があり、モードを切り替えながら操作する。

#### ノーマルモード
ノーマルモードとはvimを起動した時点のモード。このモードが起点となる。
他のモードからノーマルモードに戻るときは`esc`か`control + [`を入力する。

##### モード切り替え
<table>
    <thead>
        <tr>
            <th>コマンド</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>i</td>
            <td>カーソルの左からインサートモードに切り替え</td>
        </tr>
        <tr>
            <td>a</td>
            <td>カーソルの右からインサートモードに切り替え</td>
        </tr>
        <tr>
            <td>I</td>
            <td>行頭からインサートモードに切り替え</td>
        </tr>
        <tr>
            <td>A</td>
            <td>行末からインサートモードに切り替え</td>
        </tr>
        <tr>
            <td>o</td>
            <td>カーソルの下に一行挿入してインサートモードに切り替え</td>
        </tr>
        <tr>
            <td>O</td>
            <td>カーソルの上に一行挿入しインサートモードに切り替え</td>
        </tr>
        <tr>
            <td>v</td>
            <td>ビジュアルモードに切り替え、文字単位の選択を開始</td>
        </tr>
        <tr>
            <td>V</td>
            <td>ビジュアルモードに切り替え、行単位の選択を開始</td>
        </tr>
        <tr>
            <td>control + V</td>
            <td>ビジュアルモードに切り替え、矩形の選択を開始</td>
        </tr>
        <tr>
            <td>:</td>
            <td>コマンドモードに切り替え</td>
        </tr>
        <tr>
            <td>/</td>
            <td>コマンドモードに切り替え（単語の検索を行う）</td>
        </tr>
        <tr>
            <td>etcかcontrol + [</td>
            <td>ノーマルモードに切り替え</td>
        </tr>
    </tbody>
</table>

##### 移動
<table>
    <thead>
        <tr>
            <th>コマンド</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>k</td>
            <td>↑に移動する</td>
        </tr>
        <tr>
            <td>j</td>
            <td>↓に移動する</td>
        </tr>
        <tr>
            <td>h</td>
            <td>←に移動する</td>
        </tr>
        <tr>
            <td>l</td>
            <td>→に移動する</td>
        </tr>
        <tr>
            <td>gg</td>
            <td>一番上の行に移動する</td>
        </tr>
        <tr>
            <td>G</td>
            <td>一番下の行に移動する</td>
        </tr>
        <tr>
            <td>w</td>
            <td>次の単語の先頭に移動する</td>
        </tr>
        <tr>
            <td>b</td>
            <td>前の単語の先頭に移動する</td>
        </tr>
        <tr>
            <td>e</td>
            <td>単語の最後に移動する</td>
        </tr>
        <tr>
            <td>0</td>
            <td>行頭に移動する</td>
        </tr>
        <tr>
            <td>$</td>
            <td>行末に移動する</td>
        </tr>
    </tbody>
</table>

##### その他
<table>
    <thead>
        <tr>
            <th>コマンド</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>y</td>
            <td>1文字コピー</td>
        </tr>
        <tr>
            <td>yy</td>
            <td>1行コピー</td>
        </tr>
        <tr>
            <td>コピーしたい行数yy</td>
            <td>指定した行数をコピー</td>
        </tr>
        <tr>
            <td>p</td>
            <td>下にペースト</td>
        </tr>
        <tr>
            <td>P</td>
            <td>上にペースト</td>
        </tr>
        <tr>
            <td>x</td>
            <td>1文字削除</td>
        </tr>
        <tr>
            <td>dd</td>
            <td>1行削除</td>
        </tr>
        <tr>
            <td>u</td>
            <td>1つ前の状態に戻る</td>
        </tr>
        <tr>
            <td>control + r</td>
            <td>取り消した操作のやり直し</td>
        </tr>
    </tbody>
</table>


#### インサートモード
インサートモードは文字を入力できるモード。

##### 主なコマンド
<table>
    <thead>
        <tr>
            <th>コマンド</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>control + h</td>
            <td>直前の1文字を削除</td>
        </tr>
        <tr>
            <td>control + w</td>
            <td>直前の1単語を削除</td>
        </tr>
        <tr>
            <td>control + u</td>
            <td>行頭まで削除</td>
        </tr>
        <tr>
            <td>control + t</td>
            <td>インデントを右にずらす</td>
        </tr>
        <tr>
            <td>control + d</td>
            <td>インデントを左にずらす</td>
        </tr>
        <tr>
            <td>control + o</td>
            <td>一度だけノーマルモードのコマンドを入力できる</td>
        </tr>
    </tbody>
</table>


#### コマンドモード
コマンドモードとはコマンドを入力するモード。エディタの下の部分に入力したコマンドが表示される。

##### 主なコマンド
<table>
    <thead>
        <tr>
            <th>キー</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>:w （writeの略）</td>
            <td>上書き保存</td>
        </tr>
        <tr>
            <td>:w [ファイル名]</td>
            <td>名前をつけて保存</td>
        </tr>
        <tr>
            <td>:q（quitの略）</td>
            <td>編集終了</td>
        </tr>
        <tr>
            <td>:q!</td>
            <td>保存しないで編集終了</td>
        </tr>
        <tr>
            <td>:wq</td>
            <td>保存して編集終了</td>
        </tr>
        <tr>
            <td>/[単語]</td>
            <td>単語を検索</td>
        </tr>
    </tbody>
</table>

#### ビジュアルモード
ビジュアルモードとは、範囲を選択して、その範囲に対して何らかの操作を行うモード。

##### 主なコマンド
<table>
    <thead>
        <tr>
            <th>キー</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>d</td>
            <td>選択した範囲を削除</td>
        </tr>
    </tbody>
</table>