8.1 viエディタの保存と終了
Linux Essentials Online Text | 2021/07/26

ファイルを編集するエディタであるvi コマンド(vim)の最も基本的な操作として、エディタを開始する方法と終了する方法を知る必要があります。

エディタの開始はvi コマンドの実行により行われ、終了は終了コマンドを入力します。エディタの終了には、変更がなければ終了、直ちに終了、ファイルを保存してから終了、など幾つかのコマンドがあります。

ファイルの開く方法と終了の方法

書式:

vi ファイル名

vi コマンドでファイルを開くにはvi コマンドの後に編集したいファイル名を指定します。
ファイル名を指定した際に、そのファイル名が存在しない場合は指定した名前のファイルが新規作成されます。

実習:ファイルの開閉

既存の設定ファイルである/etc/hostsファイルを開いてviエディタで開いてみましょう。

$ vi /etc/hosts

/etc/hostsファイルをviエディタで開くと、下記のような画面になります。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

"/etc/hosts" [readonly] 2L, 158C

デフォルトでは「127.0.0.1」で始まる行と「::1」で始まる行の2行が記載されていると思います。

それでは今度は、ファイルを閉じてみます。
viコマンドでファイルを開いた後、内容を変更せずに終了する場合は[:q]を使います。

まずは[:(コロン)]を入力してみてください。左下に[:(コロン)]が表示されたことがわかると思います。[:(コロン)]は、これからコマンドを入力しますよ、という宣言文字です。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
~
~
:q  ← 「:」を入力すると、左下に文字が表示される。

[:(コロン)]が入力されたら[q]を入力して[Enter]を押してください。$マークが表示され、いつものコマンド入力画面に戻ってくれば問題有りません。

viを終了するためのコマンド

コマンド実行後の動作
:q終了・・・quit
:q!強制終了
:w保存(書き込み)・・・write
:w!強制保存
:wq保存終了・・・write & quit
:wq!強制保存と終了
:qファイルを保存しないで終了
ZZ上書き保存し(変更がなければそのまま)viを終了

主に使用するのは、q(終了)、w(保存)の2種類で、この2つのコマンドを組み合わせて使います。
また、コマンドの末尾に「!」を付与すると強制的に実行するという意味を持ちます。この3つの文字のそれぞれの意味を覚えましょう。

ZZは特殊な終了方法です。ファイルに変更があれば保存して終了、なければ上書きせずに終了します。場合によって[:q!]、[:wq!]のどちらの動きも出来、同じ意味を持つ手段として試験にでるようです。[:(コロン)] が不要である点にも注意してください。

実習:変更した後に保存しないで終了

viquit.txtというファイルを新規作成してみます。
下記の通りコマンドを実行してみましょう。

$ vi viquit.txt

カレントディレクトリには viquit.txt と同名のファイルは存在しないため、ファイルが新規作成されます。

~
~
~
"viquit.txt" [New File]

左下にも以下のような表示が出力されており、新規ファイルであることがわかります。

次にファイルの内容を変更します。ファイルに何か追加した方がわかりやすいので、「abbbbbcccccddddd(aを1回、b、c、dを5回づつ)」と入力し、最後に[ESC]を入力してください。

bbbbbcccccddddd
~
~
~

文字が入力されました。ファイルの内容が更新されたので、viエディタを終了してみます。

bbbbbcccccddddd
~
~
~
:q ← 「:q」を入力したら、[Enter]キーを押下します。

先ほどと同じように、 [:(コロン)]が入力されたら[q]を入力して[Enter]を押してください。

bbbbbcccccddddd
~
~
~
E37: No write since last change (add ! to override)

エラーが表示され、終了することができません。ファイルを編集した(ファイルの内容が変更された)状態で、エディタを終了しようとすると、変更されたデータがあるため警告が表示されます。

ファイル内容を変更した後、保存しないで終了したい場合は[:q!]コマンドを用いて強制的に終了します。

ファイルを保存して編集を継続

ファイルの編集結果を一旦保存して作業を継続したい場合は、[:w]を使います。

実習:変更した後に保存して編集継続

それでは、まずviwrite.txtを作成します。

$ vi viwrite.txt

先ほどと同様、 viwrite.txt も新規ファイルです。

~
~
~
"viwrite.txt" [New File]

文字列を追加してから保存した方がわかりやすいので、先ほどと同じように「abbbbbcccccddddd(aを1回、b、c、dを5回づつ)[Esc]」と入力します。

bbbbbcccccddddd
~
~
~

今回は、入力した内容がなくならない様に一旦保存してから編集を継続します。
[:w]コマンドを入力しましょう。

[:w]コマンドは、編集内容を保存しますが、viエディタを終了しません。

bbbbbcccccddddd
~
~
~
"viwrite.txt" [New] 1L, 16C written

保存するとに最下行にファイル名、行数(LinesのL)、文字数(CharactersのC)、そして、おこなわれた作業が表示されます。

ファイルを保存するときにエラーになることがありますが、この時、自分のホームディレクトリで作成したファイルであれば、[:w!]を使って強制的に書き込むことで編集を継続できるはずです。なお、ファイルが保存されると[:q]コマンドで終了できます。

ファイルを編集した後に保存してすぐに終了したい場合があります。ファイルを保存するコマンドは[:w]で、終了するコマンドは[:q]です。ファイルの変更を保存して終了したい場合はこの2つのコマンドを合わせて[:wq]と続けて入力する事ができます。ファイルの変更を強制的に保存して終了したい場合は「:wq!」と続けて入力します。

PAGE TOP