【🔰初心者向け】Vimのススメ① [攻略はインサートから！]

## はじめに
こんにちは！ITスクールRareTECHにてCS（Customer Support）を担当している池村です。今回の記事はVimについてです。Linuxにはほぼ標準でついているこのエディタです。このエディタを使いこなせると、他のエディタよりも迅速に開発ができるようになります。

:::note info
コーディングするには、VSCodeでも十分だとは思っています。
エディタ論争をする気はなく、シェルが好きな人はこっちの方が良いと思っているだけです。
:::

![7d0de1bb-f269-481e-951f-747a68e0d5a7_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/ab6b6f59-901b-417b-babb-2d80c2cf96e8.png)


## Vimを使い始めてみて
初めてVimを触った時は、こんな使いにくいエディタでコーディングなんて無理だろうと思いました。実際私も初期はVSCodeを使っていましたし、今でも良いエディタだと思っています。

しかし、弊社のCTOのVimの操作を見て感動を覚えてしまい、しどろもどろな状態でVimを触り始めました。私自身まだまだVimを使いこなしていないのですが、やはり速いと感じます。

:::note warn
Vimを使うと決めたからには、慣れない間、ストレスを感じながら作業をすることになります。その覚悟があるか、業務に支障がないかを考えて挑むようにしましょう。
:::



## 基本的な要素として
Vimの特徴として、まずモードがあります。
これはモードを切り替えることで、効率よくファイルを編集できるようにする、モーダルエディタと呼ばれるものになります。

Vimに存在するモードは以下になります。

| モード           | 説明                                 |
|------------------|--------------------------------------|
| ノーマルモード   | カーソル移動、コピー、ペースト等の操作 |
| インサートモード       | 実際のテキスト入力                   |
| ビジュアルモード | テキストの範囲選択                   |
| コマンドモード   | ファイル保存や終了などのコマンド実行   |

#### ノーマルモード
まずこれが基本のモードです。Vimでファイルを開くと、まずこの**ノーマルモードで開かれます**。このモードを使いこなすのが、熟練者への道になります。

#### インサートモード
このモードでは、実際にファイルに文字を入れることができる状態になります。
初心者ほどこのモードでいることが多く、**熟練者ほどインサートに入ることは少なくなります**。ただ、このモードが一番普通のエディタのように扱えるので、VSCodeなどに慣れている人は滞在してしまうモードになります。

#### ヴィジュアルモード
このモードは範囲選択などを行うモードになります。
ノーマルモードに慣れてくると、こちらのモードも活用しつつ、さらに効率的な編集を行うことができるようになります。

#### コマンドモード
このモードは、ファイルの保存や閉じるなどのコマンドを打って命令ができるモードです。これに関してはモードとして意識することはあまりありませんが、大事な要素です。

## 初心者はまずこれだけやれればOK
初心者がまずやるべきことは以下です。

1. Vimでファイルを開く
1. インサートモードに入る
1. 編集したいところを編集する
1. 保存して閉じる


:::note info
はい。おしまいです。
:::

ここまでで使っているのはヴィジュアルモード以外の全てのモードです。
実際に実行していきましょう。

今回のハンズオン環境は、一応Gitで管理します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/d38df57d-59bd-46fb-9de3-a02c3cb1d55f.png)

Gitの初歩を学びたい方は、以下の記事を参考にしてください。

https://qiita.com/ikemura-ren/items/fe5082ad8ff8f626f5ee

#### ハンズオン
##### ① ファイルを開く
クローンしてきたディレクトリで、ファイルを開きます。
```Bash:使い方
vim test.txt
```

ファイルを開くと、Vimで開かれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/4fd167de-c9cb-492e-a75e-30a9f8e7a9cb.png)

まだ何も書かれていないファイルですね。保存するまでは、このファイル自体、まだ存在していません。

:::note warn
私の環境ではNVIMを使っているので、見た目は若干違うものになっています。操作方法は一緒ですのでご安心ください。
:::

まず、ファイルを開いた状態ということはノーマルモードにいるということです。

#### ② インサートモードに切り替える
次にキーボードの`i`を入力して、インサートモードに入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/69eb53ec-2bb9-45ff-8988-2f84317075b4.png)

カーソルが若干変わりました。

※ノーマルモードの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/553ee8c3-29c9-45a4-9c97-23e19e10319a.png)


:::note warn
設定によっては、見た目が変わらない時もあります。
:::

では適当に入力してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/928938f9-e64e-4acb-96a3-062aebde1dd5.png)

さて、ファイルの編集が終わりました。

次に保存して、ファイルを閉じたいと思います。

##### ③ ファイルを保存、閉じる
ファイルを保存して、閉じる命令をするには、コマンドモードで行う必要があります。
**これはインサートモードではできず、ノーマルモードで行えるものです。**

ですので、ノーマルモードに戻ります。**そのためには`esc`キーを押しましょう**。
ノーマルモードに戻りますので、その状態で、`:wq`と入力して実行（Enter）しましょう。すると、ファイルが保存されて、ファイルを開いていたVimが終了します。

本当に保存がされているかどうか、実際に中身を確認しましょう。

```Bash:使い方
cat test.txt
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/b4b99ca3-90e7-4990-b6b4-6f03247d4cf6.png)

:::note info
中身が編集されているのが確認できましたね。
初心者はここまでキャッチアップできていればOKです。ですので、**Vimをとりあえず使いたい方**は、ここまでみていただければ、とりあえずファイルの編集が可能です。
:::

## インサートモードについて
インサートモードに入るには`i`キーを使うと言いました。`i`キー自体はインサートの`i`だとわかりやすいのですが、`i`キー意外にもインサートモードに入る方法があります。

#### `i`キーからのインサートモード
こちらはよく使われますが、ノーマルモードからインサートに入る際、カーソルの左から始まるのが`i`です。これが何を行っているのかというと、まず以下の画像をみてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/b1da6f40-d8ce-4837-b532-8210bbc38faa.png)

この画像では、現在ノーマルモードで、かつ`イ`にカーソルが当たっている状態です。ここで`i`キーを押すと、以下の画像のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/8713d63a-e805-481d-8432-a68af77ace6b.png)

`イ`の左にカーソルが当たっているのがわかるでしょうか？

:::note info
ノーマルモードでのカーソル位置が大事になってきます。
:::

#### `a`キーからのインサートモード
こちらの`a`キーは、ノーマルモードからインサートモードに入る際、カーソルの右から始まるものです。これも画像をみてみましょう。先ほどと同じように`イ`にカーソルを当てた状態で`a`キーを押してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/1934e22b-1f90-4d98-82ea-62bd46f4608e.png)

今度は`イ`の右側にカーソルがありますね。

:::note info
この`i`と`a`の使い分けが重要です。
:::

#### `o`キーからのインサートモード
`o`キーでは、ノーマルモードからインサートモードに入る際、カーソルがある行の下の行に改行した上でスタートします。これも画像をみてみましょう。

今回は`デビュー`という文字列の`ビ`にカーソルが当たった状態で、`o`キーを押してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/3a60467a-59a2-40fd-8694-3c60711ef294.png)

画像の通り改行がされて、2行目からインサートモードに入りました。

#### `O`キーからのインサートモード
`O`キーからインサートモードに入ると、現在カーソルが当たっている行の**上の行**が空白行となってスタートします。これも画像をみてみましょう。
今回は先ほどの空白行を消して、再度2行しか書かれていない状態に戻します。カーソルは`V`にあるとします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/95e10712-249d-408e-9451-83711cd0389f.png)

これで`V`の上の行にカーソルがいきました。

:::note info
`o`、`O`の二つもよく使います。これも使えるようになると、選択肢はかなり増えます。
:::

#### `I`と`A`からのインサートモード
まだあります。今度は`I`キーと`A`キーです。これはまず`I`が**行頭**からインサートモードに、`A`が**行末**からインサートモードに入ります。

ではまた、`イ`にカーソルがある状態から試してみます。
##### `I`の場合（行頭）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/a389613f-0864-49e8-b9e9-dad6befbd0ea.png)

##### `A`の場合（行末）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/aeee367e-cee0-4886-b393-a5cb1a0fdfa5.png)


#### インサートモードの入り方まとめ
| コマンド | 動作                            |
|----------|---------------------------------|
| `i`      | カーソルの直前から挿入           |
| `I`      | カーソルがある行の先頭から挿入   |
| `a`      | カーソルの直後から挿入           |
| `A`      | カーソルがある行の末尾から挿入   |
| `o`      | 現在の行の下に新しい行を作って挿入 |
| `O`      | 現在の行の上に新しい行を作って挿入 |

:::note info
インサート->ノーマルに戻るのも癖つけていきましょうね
:::


## おわりに
今回はVimのススメ①ということで、初心者がまず覚えるところ、インサートモードについてご紹介しました。次はノーマルモードですね。ここが一番難しいところです。一つ一つ説明しますので、しっかり覚えていきましょう。