こっそり見てVimで最低限の作業をできるようになろう

# はじめに
この記事では、Vimを使って最低限のファイル編集作業ができるようになることを目的としております。
・ローカル環境のLinuxでファイルの編集ってどうやるの。
・Vimのコピペってどうやるの？
・Vimでの検索の仕方って？
といった方々の一助となれば幸いです。

# Vimのインストール
Vimのバージョンを確認して、インストールされているかを確認します。
インストールされていなければ、インストールを実施してください。

```bash:bash
# バージョンを確認
$ vim --version

# Vimをインストールする
$ yum install vim
```

# Vimのモードについて
Vimにはいくつかのモードが存在します。
最低限のファイルの編集であれば、ノーマルモードと挿入モードを切り替えられれば、ファイルを新規保存や編集が可能になります。
各モードでできる作業は、ざっくりとこんな感じです。

| モード   | 作業                  |切り替えの入力キー|
|:--------|----------------------|----|
| ノーマル  | カーソル移動、コピペなど|Esc|
| 挿入     | 入力など             |i|

# 実行の仕方
BashなどのCLI上で下記のコマンドを実行すればVimを実行できます。

```bash:bash
$ vim
```

# ファイルを開く
Vimの実行の仕方がわかったところで、具体的な操作を見ていきます。
Vimを起動する際にファイル名を渡すか否かで、新規作成か既存ファイルの編集かが別れます。

```bash:bash
# 新規ファイル作成の場合
$ vim

# 既存ファイルを開く場合
$ vim <ファイル名>
```

# 基本的なカーソル移動
Vimでファイルを開けたら、次はカーソル移動です。
ノーマルモードで下記のキーを押したら、カーソル移動が行えます。
ホームポジションから手を動かすことなく、カーソル移動ができますね。
画面左下に「----INSERT----」と書かれていたら、挿入モードなので注意しましょう。

| コマンド | 内容|
|:--------|-----|
|h|←|
|j|↓|
|k|↑|
|l|→|

# 便利なカーソル移動
VimにはHomeキーやEndキーのようなカーソル移動の他に、単語ごとの移動の仕方も存在します。
最初はとっつきにくいかもしれませんが、覚えると格段に早くカーソルを移動させることができます。

1つ注意点として、**Vimはスペース以外にも,や(などの記号も単語の区切りとみなします**ので、単語移動の際には注意が必要です。

| コマンド | 内容|
|:--------|-----|
| w |次の単語の先頭に移動する|
| b | 前の単語の先頭に移動する|
| W | スペースのみを区切り文字と判断して次の単語の先頭に移動する|
| B | スペースのみを区切り文字と判断して前の単語の先頭に移動する|
| 0 | 行頭に移動する|
| $ | 行末に移動する|
| gg | 1行目に移動する|
| G | 最後の行に移動する|
| <数字>G | 該当の行番号の先頭に移動する|

行番号を表示するにはノーマルモードで下記のコマンドを実行します。

```vi:vim
:set number
```

# ファイルの保存・vimの終了
カーソル移動の仕方を確認したら、ファイルの保存方法とvimの終了の仕方です。
下記のコマンドはノーマルモードで実行します。

| コマンド | 内容|
|:--------|-----|
| :q | 終了する|
| :w | 保存する|
| :w <ファイル名.拡張子> | 名前を付けて保存する|
| :q! | ファイルを保存せずにvimを終了する|
| :wq | 保存してvimを終了する|

#### ワンポイント
ファイルを編集して保存する際には、
①":w"で保存
②":q"でvimを終了する
という手順でできますが、それだと面倒なので、":wq"と入力して一度に保存とvimの終了を実行しちゃいましょう。


# ファイルの編集
ファイルの保存方法まで確認したら、今度は文字の削除や文字入力についてです。
ノーマルモードで下記のコマンドを入力することでファイルの中身を編集していきます。
ノーマルモードから挿入モードに切り替える時は、"i"を入力すると書きましたが、"i"で挿入モードに切り替えるとカーソル位置の左側から文字入力が開始されます。行末から入力を開始したい時やファイルの最下部の不要な改行を削除するに特に不便ですので、"a"でも挿入モードに切り替えられることを覚えておくと良いと思います。

| コマンド | 内容|
|:--------|-----|
| x | 文字の削除|
| i | カーソル位置の左側に文字を追加する|
| a | カーソル位置の右側に文字を追加する|
| I | カーソル行の行頭に文字を追加する|
| A | カーソル行の行末に文字を追加する|


# コピー・ペースト・カット
先程確認した、カーソル移動と合わせることでVimのコピペが格段にしやすくなります。
使っているターミナルソフトによっては、通常のショートカットでコピペも可能ですが、Vim特有のコピペの仕方も覚えておくと、より作業スピードが上がります。

## ヤンク
Vimではいわゆるコピーのことをヤンク(yank)と呼びます。
基本的に下記の形式でコマンドが成り立っていると意識すれば、動作内容が覚えやすくなります。

```vim
y + カーソル移動のコマンド
```

| コマンド | 内容|
|:--------|-----|
| y$ | 行末までヤンク|
| y0 | 行頭までヤンク|
| yl | 1文字をヤンク|
| yw, yb | 単語を1つヤンク|
| ygg | 最初の行までヤンク|
| yG | 最後の行までヤンク|
| yy | 現在カーソルのある行をヤンク|


## デリート
カットのことを、Vimではデリート(delete)と呼びます。
また、ヤンク同様にデリートのコマンドの形式はカーソル移動のコマンドとの組み合わせで覚えると良いです。

```vim:vim
d + カーソル移動のコマンド
```

| コマンド | 内容|
|:--------|-----|
| d$ | 行末までデリート|
| d0 | 行頭までデリート|
| x, dl | 1文字をデリート|
| dw, db | 単語を1つデリート|
| dgg | 最初の行までデリート|
| dG | 最後の行までデリート|
| dd | 現在カーソルのある行をデリート|


## プット
ペーストのことを、Vimではプット(put)と呼びます。
ヤンクやデリートした文字列は、pを入力することで貼り付けることができます。

| コマンド | 内容|
|:--------|-----|
| p | カーソルから右側に貼り付ける|

# 検索と置換
続いて検索と置換の仕方を見ていきます。
置換はコマンドの書き方が異なりますので、注意してください。

## 検索

| コマンド | 内容|
|:--------|-----|
| /<文字列> | 下方向に向かって<文字列>を検索する|
| ?<文字列> | 上方向に向かって<文字列>を検索する|
| n | 次の検索結果に移動する|
| N | 前の検索結果に移動する|

## 置換
下記のコマンドは、ファイル内のすべての置換文字列を置換後文字列に一気に変換する処理のコマンドです。

```vim:vim
:%s/<置換元文字列>/<置換後文字列>/g
```

# 元に戻す
最後に、元に戻す処理の仕方を確認します。
Vim以外のテキストエディタ等で編集している際に、元に戻す時はCtrl + zを実行すると思います。
Vimで同様の処理をさせるにはノーマルモードで下記のコマンドを実行します。

| コマンド | 内容|
|:--------|-----|
| u | 直前の編集操作を取り消して前の状態に戻す|
| Ctrl + r | uコマンドの処理を元に戻す|


# おわりに
こっそり見て終わる文量じゃなかった。。。