【超初心者向け】実務で詰まないためのVim - これだけ覚えればOK！

## この記事について
サーバーサイドの実務未経験者に、ガイダンスで「**Vimってなに？**」という説明をした際の議事MEMOです。

## Vimとは何か?→~~×使えると便利な~~○触れないと仕事で詰むエディタ
はい、思い切った言い方をしました。趣味がプログラミングの人・幼少期からプログラミングが好きだった人ならいざ知らず、仕事・現場で、「**Vimってなに？**」と疑問に持った人には、この説明で問題ないと思います。
### Vimは仕事で必須のスキルと認識しよう
Vimは一種のテキストエディタです。そのため、メモ帳・VSCode・サクラエディタなどのよく知られたテキストエディタと同様に、テキストファイルの作成・編集のために使用します。しかしVimは、Linuxのほとんどのディストリビューションで標準装備されているエディタです。

つまり言い方を変えると、

・セキュリティ等の制約により、不要なソフトウェアが一切インストール不可の端末のため、テキストファイルの編集にはVimしか使用できない

といった場面は実務上よくあります。具体的には、

- SSH接続により、リモートでサーバー側の作業をするとき
- Dockerコンテナの中で、サッと定義ファイルを書き換えるとき

などです。

（※SSHやDockerが何のことかわからない人は、たんに「コマンド操作のみで動いてる真っ黒なPC」と読み替えてOK。)

そのため、エンジニア実務未経験者・微経験者がVimでもっとも回避すべきなのは、

- Vimの操作法がわからず、手順書があるのに、その通りに作業が進められない
- 環境構築・設定ファイルの作成が進まず、進捗に遅れが出る

といったシチュエーションだと思います。

### Vimを「使いこなす積極的メリット」は後でいい
開発技術者むけの専門書によくあるVimの説明は、実務未経験者・微経験者にとって、Too Much(情報過多）になりがちです。たとえば、

- 軽くて早い
- 使いこなせると、作業スピードが劇的に向上する
- 歴史が長く、世界中に普及しており、英語・日本語両方でとにかく情報が豊富
- プラグインが充実しており、自分好みのカスタマイズが容易
- マクロなどの拡張機能も充実しており、テキスト作成・編集作業の自動化・効率化がしやすい


はい、どれもVimの特徴として正しいものの、実務の最低ラインを大幅に超えていますね。初学者・実務未経験（微経験）エンジニアにとっての必要性・重要性にフォーカスしていない印象があります。

### 注記:以下の話は、本記事ではスルーします
**※初学者は、この章は読み飛ばして構いません。**

本記事では、実務における”詰み”の状態を回避すべく、必要最低限に絞ったVimの説明を目指します。したがって、以下の内容には一切言及しません。
 
- **VimとViの違い:**
　→ どうでもいいです。 どちらも**ターミナル（ハッカーみたいな黒い画面）で動くエディタ**と思っておきましょう違いは気にしなくてOK。

- **VimとEmacsの違い・宗教戦争:**
　→ 知る必要なし。当たり前。マニアックな人だけで一生議論していてください。

- **Vimを「極めたい」人向けのテクニック:**
　→「生まれたての赤ちゃんにマラソンを教えるようなもの」です。まずは「歩く（Vimを最低限使う）」ことから始めましょう。

## まずは最低限の３つの操作　開く→編集→保存して終了　の流れ
### コマンドの流れ
1. ```vim ファイル名``` でテキストファイルを開く
2. ```i``` で編集モード
3. ```ESC``` → ```:wq``` で保存して閉じる

### 注意点1 vimには「挿入モード」と「それ以外のモード」がある
```ESC```キーでモードの切り替えができます。
```i```キーを押すと「挿入モード」となり、普通のテキストエディタと同じ操作感でテキストが扱えるようになります。

※各モードの説明は割愛します。興味がある人は、一般的なVimの解説書にいくらでも情報があるので、別の記事を参考にしてください。

### 注意点2 :q しても「変更があるので閉じられません」と怒られるとき
テキストに何かしらの変更が加えられているときに出ます。
- 保存して閉じるとき→ ```:wq``` 
- 保存しないで閉じるとき→ ```:q!``` 

### 注意点3 :方向キーでカーソル移動できなくても、慌てない
```h``` : 左
```j``` : 下
```k``` : 上
```l``` : 右

というカーソル移動がVimのデフォルトです。
カーソルキー使えないの不便では？なんでこんなに複雑なの？と思っても一旦受け入れましょう。慣れると段々快適になります。そういうものだと思って諦めてください。

## 編集内容を元に戻すときは、```ESC``` → ```u```
挿入モードで、「うっかりどこか消してしまった」「何を追記したのかわからなくなってしまった」ときには、
1. ```ESC```:挿入モードを抜ける
2. ```u```:操作を巻き戻す 

という手順で、一旦もどしましょう。繰り返し押し続けることで、連続での巻き戻しも可能です。
※戻し過ぎたら、```<Ctrl> + R```で、巻き戻しの巻き戻し（つまりまた進める）という操作もできます。

## もっと楽に使うには、各モード・ショートカットキーの活用が必須
本記事では、Vimの各モードを、「挿入モード」と「それ以外のモード」として、~~詳しい人から怒られるような~~必要最低限に絞った整理を試みました。

しかしエディタとして最低限活用できるスキルを得るには、各モード・ショートカットキーの知識は必須です。

以下はコマンドモードで使用するコマンドの一例です。
### カーソル移動系：
- 先頭に移動：```gg```
- 末尾に移動：```G```
- 行の先頭に移動：```0```
- 行の末尾に移動：```$```
- 次の単語へ移動：```w```
- 前の単語へ移動：```b```

### コピペ系：
- カーソル行をコピー：```yy```
- ペースト：```p```

### 行・文字の削除系：
- カーソル行を削除：```dd```
- ひと文字削除：```x```

### 一度に全部覚えない・ひとつずつ試して慣れよう
格闘ゲームのコマンドのようなものだと思って、一つずつ使って試して、慣れましょう。
まずは、「**どこまで使いこなせるかは、使いこなせるコマンドの数次第**」という認識をもつことが第一歩です。どこまで使いこなせるようになりたいか、各自で目標を決めることが大切です。

「沢山あるコマンドをスマートに使いこなしたい」人は、下記記事を参考にしてください。

https://qiita.com/Inclusive_Solutions_LLC/items/67d030056411b839ce55

本記事の続編として、丸暗記に頼らないVimのコマンドの話をしています。

## 興味を持ったら、まずは無料の公式チュートリアルを試そう
```vimtutor ja```コマンドで、Vimのチュートリアルが起動します。Vimが入っているマシンであれば大体セットで入っています。勉強したくなったらまずこれがおすすめ。

当然無料です。プログラミングなどの作業に飽きたら、気が向いたときに取り組んでみるのもいいでしょう。所要時間は、3~4時間くらいが目安だと思います。

有料の書籍は、このチュートリアルを一周したあと、「もっとVimを極めたい」と思ってから購入すれば十分でしょう。

※会社のセキュリティルームのパソコンなどで、勝手にvimtutorを起動して、Vimの練習をするのはやめましょう。Vimが入っているマシンだとそのままチュートリアルも開始できてしまう可能性が高いですが、他の人の作業の邪魔になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3664630/50f678c0-573d-4dae-8775-6170bdac31a9.png)

筆者のパソコンで、```vimtutor jp```をしたときの画像が上記。```vimtutor en```とすれば、英語でのチュートリアルも出てきます。

## 最後に・筆者からひと言
初学者・Vimにはじめて触る人が極力気軽に入門できるようにしたいと思い、本記事を書きました。
議論を端折りすぎていたり、追加で説明すべきと思われる事項を見つけたりした方がいたら、教えてください。

## 参考にした記事
https://qiita.com/Hiyajo/items/9f87c5687652da42f275