Vim、vi(vim)コマンドの使い方(初級編)


エンジニアでまだ日が浅い頃、上司にみてもらいながら一緒にコードを修正している時、
上司「じゃあそのディレクトリ直下のtest.configのファイルにこのコード追加しといてよ」
私「えっと、どうやって書き換えたらいいですか・・？」
上司「あぁ、vi test.configってコマンドでいけるよ」

私「(コマンド打ったけど何が起きてるかわからない・・)」

という過去の私のために記事を書こうと思います。

# **Vimってなんだよ**

まず、Vimとは何か。

簡単にいうと、Linux系で多く使われるテキストエディタです。
(Windowsでもインストールすれば使えます。)

そう。メモ帳の仲間です。
VScodeとかサクラエディタとかその辺の一種という認識で大丈夫です。

ただこれはターミナルとかコマンドプロンプトの中で使われることが多いです。

CUIでコマンドを打つ流れでファイル編集もできちゃうので、
慣れたら便利で早いし、何よりかっこいいです。

そしてメモ帳と同じとは言いましたが、
Vimmerと呼ばれる方々がいるくらい癖者なのもまた、このVimの特徴です。

# **使ってみる**

じゃあ前置きはこの辺にして、実際にどう使うのかを、まずはやってみます。

今回は、WorkSpaceというフォルダを作り、
その中にtest.txtというファイルを作って、Vimでtest.txtを編集します。

フォルダを作る

```bash
mkdir WorkSpace
```

作ったフォルダに移動

```bash
cd WorkSpace
```

ファイルを作る

```bash
touch test.txt
```

Vimで編集
(実は、上記のtouchしなくても以下のコマンドだけでファイル作成までやってくれますが、
今回はわかりやすいように丁寧にやりました。存在しないファイル名をしていすると新規作成してくれます。)

```bash
vi test.txt
```

以下の表示に切り替わる

```bash
~
~
~
~
~
~
~
~
"test.txt" 0L, 0B
```

iのキーを押す

```bash
~
~
~
~
~
~
~
~
~
~
~
~
~
-- INSERT --
```

カーソルを編集したい箇所に合わせ、編集

```bash
testtest
~
~
~
~
-- INSERT --
```

espのキーを押す

```bash
testtest
~
~
~
~
```

: w qを押す

```bash
testtest
~
~
~
~
:wq
```

Enter(return)を押して完了

少し長かったですが、これが一連の流れになります。

# **何をしていたの**

解説の前に、Vimの大きな特徴を書きます。

Vimはただのメモ帳と違って、モードが4種類あります。

1. 「挿入モード」
2. 「ノーマルモード」
3. 「コマンドモード」
4. 「ビジュアルモード」

Vimは何をするかに応じて、モードを切り替えないといけないことを覚えておいてください。

では、Vimを使って、ファイルを開きます。

さっきのコマンドだと、

```bash
vi test.txt
```

ここです。

ちなみに、

```bash
vim test.txt
```

でも同じ動きをします。

`vi`と`vim`は、歴史をたどると厳密には意味合いは違いますが、
現在だと`vi`でも`vim`でも同じVimが開きますので、一緒だと思ってもらって問題ないです。
(vimはviの改良版のこと。かつてはビジュアルモードがvimにしかないなどの機能差がありました。)

もちろんOSや環境によっては、viとvimで動くモノが違う可能性はあります。
もし不安ならビジュアルモードが動くか確認してみましょう。

```
vi 開きたいファイル(のパス)
```

でVimを使ってファイルを開きます。

Vimでファイルを開くと

```bash
~
~
~
~
~
~
~
~
"test.txt" 0L, 0B

```

こんな感じに開きます。

ファイルに何か書かれていれば、それが表示されているはずです。

~の部分は、何も書かれてないよという意味です。

Vimを開いた最初はノーマルモードで開かれています。

ノーマルモードだと改行と削除とコピペができます。

では今回は編集したいので、挿入モードに切り替えます。

「i」を押すと挿入モードに切り替わります。

この状態が、メモ帳に一番近いかもしれません。

カーソルを移動して、書いたり消したりできます。

```
~
~
~
~
-- INSERT --

```

ファイルの編集が終わったらノーマルモードに戻ります。
挿入モードのままだと、保存やファイルを閉じたりができません。

ノーマルモードに戻る時は、「esc」を押します。

ノーマルモードに戻ったら、コマンドモードに切り替えて、保存してファイルを閉じましょう。

コマンドモードへは「:」を押します。
コマンドモードになったらそのまま、Vimにさせたい動作のコマンドを入力します。

今回は、保存の「w」と終了の「q」、
この二つを入力してEnter(return)すれば終了です。
(基本的なコマンドの種類は最後にまとめてます)

また、これは補足ですが、
編集したはいいが保存せずに終了したい時などあると思います。

その時は「:q」で終われそうな気がしますが、変更があるので終了できませんとVimに怒られちゃいます。
そういう時は「:q!」で!をつけて、強制的に終わらせることができます。

以上を押さえておけば、
最初に書いたような上司からの指示が来ても、そこまで焦ることはないはずです。

初見じゃVimは意味がわかりませんが、慣れると結構いいです。

あとここでは、使いませんでしたが、ビジュアルモードなるものがあります。

「v」を押すと切り替わります。

切り替わった位置から移動すると、移動した範囲を選択状態にしてくれます。
(VimではShift + 矢印での選択ができません)
そこからコピーでも削除でもコマンドであれこれできます。

しかし実はビジュアルモードには二種類あります。

普通のビジュアルモードと矩形ビジュアルモードです。

「v」でビジュアルモード、
「ctrl + v」で矩形ビジュアルモード。

何が違うかと言うと、選択のされ方が違います。

やってみたら一発でわかりますが、
ビジュアルモードはカーソルが移動した場所を全て選択していき、
矩形ビジュアルモードは、列単位で選択していってくれるという違いがあります。

よかったら使い分けてみてください。

もちろんノーマルモードからでも、選択っしてからのコピーは可能ですが、
背景色が変わらずでわかりにくいのと、
コマンドを色々使うので、ビジュアルモードの方が直感的でわかりやすいです。

では最後に、Vimの基本的なコマンドをまとめておきます。

マニアックなコマンドは今回省きます。

# **基本的なコマンド一覧**

**ノーマルモードのコマンド一覧**

★移動(カーソル)

| 0 | 行の先頭へ移動 |
| --- | --- |
| $ | 行の末尾へ移動 |
| – | 一行上の先頭へ移動 |
| gg | 先頭行へ移動(HOME) |
| G | 最終行へ移動(END) |
| j | 1行上へ移動 |
| k | 1行下へ移動 |
| h | 左へ移動 |
| l | 右へ移動 |

★削除

| dd | 行の削除 |
| --- | --- |
| d0 | 行の中で、選択位置から前を削除 |
| D | 行の中で、選択位置から後を削除 |

削除の方法は、挿入モードでbackspace、またはビジュアルモードで選択し「d」でも可能

★コピぺ

| y | コピー（選択後） |
| --- | --- |
| yy | 1行コピー (Yでも可) |
| d | 1行コピー (Yでも可) |
| p | 貼付け (下の行) |
| P | 貼付け (上の行) |
| 数値 + p | 指定した数値の回数分貼り付ける |

※「ヤンク」という言葉が出てきます。
「コピー」と同じ意味です。
linuxではコピーのことをヤンク(yank)と言います。

★その他

| u | 変更を戻す |
| --- | --- |
| ctrl+r | 変更を進める |

**コマンドモードのコマンド一覧**

| w | 保存 |
| --- | --- |
| q | 終了 |
| wq | 保存＆終了 |
| q! | 強制終了 |
| w! | 強制保存 |
| w ファイルパス | ファイルに名前を付けて保存（既に存在するば場合はエラー） |
| w! ファイルパス | ファイルに名前を付けて強制保存 |

**挿入モードの切り替え**

| i | カーソルの前から |
| --- | --- |
| a | カーソルの後ろから |
| I | 行の先頭から |
| A | 行の末尾から |
| O | 上に空白行を追加してから |
| o | 下に空白行を追加してから |

上記で「i」を押せば挿入モードに切り替わると説明しましたが、
実はいくつか切り替わるコマンドがあります。

今回は基本的なコマンドだけまとめましたが、
Vimは本当に沼が深いので、また違った形でVimをまとめようと思います。