vi コマンドは linux 系の OS でファイルを編集するときに利用することが多いコマンドです。
vi コマンドの中にもたくさんコマンドがありますが、今回は個人的に良く利用するコマンドをまとめてみました。
この記事のコマンドを覚えておけば最低限の編集作業はできると思います。
vi コマンドでファイルを開く
vi コマンドは、以下のように「vi [filename]」で対象ファイルを編集することができます。
※以下、管理者権限で実行するので必要であれば sudo をつけて実行してください。
vi [filename]
ちなみに、既存で存在しないファイルを指定しても新規ファイルとして作成することが可能です。
root@ubuntu:/home/hogeuser# ls -l
total 0
root@ubuntu:/home/hogeuser#
root@ubuntu:/home/hogeuser# vi test
root@ubuntu:/home/hogeuser#
root@ubuntu:/home/hogeuser# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug 28 02:51 test
root@ubuntu:/home/hogeuser#
上記では、1行目の ls コマンド実行時にはファイルはありませんでしたが、
4行目で vi コマンドを実行し「test」という名前のファイルを作成した後に、
再度 ls コマンドを実行すると「test」というファイルが作成されていることが確認できます。
vi コマンド実行直後は「コマンドモード」
vi コマンドを実行すると最初は文字入力をしても何も入力できません。
これは、「コマンドモード」というモードになっているからです。
vi コマンドは「入力モード」と「コマンドモード」に分かれていて、
文字を入力する際には「入力モード」を利用して編集をしていきます。
vi コマンド一覧
この記事で紹介するコマンドの一覧を紹介します。
vi コマンド一覧(入力モード)
vi コマンド一覧(コマンドモード)
- 「x」:カーソルの文字を削除
- 「yy」:行をコピー
- 「p」:ペースト(下の行に挿入)
- 「dd」:行を削除(カット)
- 「:w」:ファイルを保存
- 「:q」:ファイルを終了
- 「:q!」:ファイルを保存して終了(強制終了)
- 「:wq」:ファイルを保存して終了
- 「:%d」:ファイルの内容を全削除
入力モード
「入力モード」に移動するためには以下の6つコマンドがあります。
以下のどれかのコマンドを入力すれば「入力モード」に移動して文字入力などが可能となります。
6つそれぞれを紹介していきますが、以下6つすべて覚える必要はないと思っていまして、
「入力モード」に移行したときに初期カーソルの場所が異なるだけで、
「入力モード」移行後は矢印キーなどで入力場所は変更できます。
なので、好きなものをどれか1つを覚えておけば最低限のファイルの編集はできます。
※私はもいつも「i」で入力モードに移行して編集しています。
「入力モード」に移動すると以下のように画面下部に「— INSERT —」と表示されます。

「a」:カーソルの右側に文字を挿入
コマンドモードで「b」の位置にカーソルを当てている状態で「a」を入力すると、
「入力モード」に移行し、そのまま文字入力をすると「b」の右側に文字が入力されていきます。
・コマンド実行前の「コマンドモード」画面

・「a」実行後の入力モードで f を4回入力

「A」:行の末尾に文字を挿入
コマンドモードで「b」の位置にカーソルを当てている状態で「A」を入力すると、「入力モード」に移行し、そのまま文字入力をするとカーソルを当てていた行の末尾に文字が入力されていきます。
・「A」実行後の入力モードで f を4回入力

「i」:カーソルの左側に文字を挿入
コマンドモードで「b」の位置にカーソルを当てている状態で「i」を入力すると、「入力モード」に移行し、そのまま文字入力をすると「b」の左側に文字が入力されていきます。
・「i」実行後の入力モードで f を4回入力

「I」:行の先頭に文字を挿入
コマンドモードで「b」の位置にカーソルを当てている状態で「I」を入力すると、「入力モード」に移行し、そのまま文字入力をするとカーソルを当てていた行の先頭に文字が入力されていきます。
・「I」実行後の入力モードで f を4回入力

「o」:下の行に文字を挿入
コマンドモードで「b」の位置にカーソルを当てている状態で「i」を入力すると、「入力モード」に移行し、そのまま文字入力をするとカーソルを当てていた行の下の行に文字が入力されていきます。
・「o」実行後の入力モードで f を4回入力

「O」:上の行に文字を挿入
コマンドモードで「b」の位置にカーソルを当てている状態で「o」を入力すると、「入力モード」に移行し、そのまま文字入力をするとカーソルを当てていた行の上の行に文字が入力されていきます。
・「O」実行後の入力モードで f を4回入力

コマンドモード
コマンドモードでは文字の入力はできませんが、コピーやペーストなどは実行できます。
また、ファイルの保存などもコマンドモードで実行します。
「x」:カーソルの文字を削除
コマンドモードで「b」の位置にカーソルを当てている状態で「x」を入力すると、
カーソルが当たっている文字を削除します。
・「x」実行後(bが削除される)

「yy」:行をコピー & 「p」:ペースト(下の行に挿入)
コマンドモードで「b」の位置にカーソルを当てている状態で「yy」を入力すると、
カーソルが当たっている行をコピーします。
また、「p」を入力するとカーソルを当てている下の行にクリップボードの内容をペーストします。
・「yy」実行後「p」を実行して行を複製する

「dd」:行を削除(カット)
コマンドモードで「b」の位置にカーソルを当てている状態で「dd」を入力すると、
カーソルが当たっている行を削除(カット)します。
・「dd」実行後

また、削除した内容はクリップボードにあるので、
「p」を実行すればペーストすることができます。

「:w」:ファイルを保存
「:w」を入力すると、変更したファイルを保存します。
vi は終了せずそのまま開かれたままとなります。

「:q」:ファイルを終了
「:q」を入力すると vi を終了します。

ファイルが変更されている場合には、以下のように警告文が表示され終了することができません。
この場合には警告文にもある通り「:q!」として ! を追加すれば強制終了することができます。

「:q!」:ファイルを保存して終了(強制終了)
上記でも少し触れていますが、「:q!」を入力すると vi を強制終了します。
変更内容は破棄されます。

「:wq」:ファイルを保存して終了
「:w」と「:q」の組み合わせになり、「:wq」を入力するとファイルを保存して終了します。

「:%d」:ファイルの内容を全削除
ファイルの内容をすべて削除します。
よくありがちなミス
保存するときに [:] を入力し忘れる
「保存やファイルを終了するときにうまくいかない」といったときには、
実体験上 「[:] を入力し忘れること」が原因であることが多いです。
wqという2文字は覚えているのですが、「:」を忘れてしまうといった形です。
基本的にうまくいかないときには自分にミスがあるので慌てずに確認するとよいと思います。
さいごに
コマンドモードのコマンドはもっとあるのですが、私が良く利用する最低限知っておけばよいものだけピックアップして紹介しました。
linuxの操作にもっと慣れてきたらコマンドモードも使いこなしてみたいと思います。^^