vi でファイルを編集する場合は、ファイルそのものが直接変更されるのではなく、vi が一時メモリ内に作成するファイルのコピー (バッファと呼ばれる) が変更されます。ディスク上にある恒久的なファイルのコピーは、バッファの内容を書き込んだ (保存した) ときだけ変更されます。
これには長所と短所があります。長所は、編集セッション中の変更内容をすべて破棄し、ディスク上のファイルに影響を与えずにファイル編集を中止することができるという点です。短所は、システムがクラッシュした場合は、保存していない作業バッファの内容が失われてしまうことです。特に、電話回線で接続されたリモート端末上の vi ユーザは、予期しない障害にさらされる危険があります。
特に重要な変更を行う場合などは、ファイルを頻繁に保存することをお勧めします。
同一ファイルに対して複数の vi セッションを同時に実行することはできますが、あまりお勧めできる方法ではありません。ファイルに書き込まれた変更とほかの同時セッションによって上書きされた変更とを見分けることは、非常に困難です。
vi には、バッファ内容のファイル保存と vi の終了を制御する類似の意味を持つコマンドが多数存在します。これらのコマンドを使うと、「ファイルの保存」、「保存と終了」、「保存しないで終了」などを選択できます。
バッファの内容を保存する (バッファの内容をディスク上のファイルに書き込む) には、次のように入力します。
:w |
Return キーを押します。
:wq |
Return キーを押します。上記の代わりに、ZZ を続けて押すこともできます。
ZZ コマンドについては、前にコロンを入力する必要も、Return キーを押す必要もありません。
ファイルを変更していない場合は、次のように入力して終了します。
:q |
Return キーを押します。ファイルを変更した場合は、:q コマンドでは vi を終了できません。このコマンドを入力すると、次のメッセージが表示されます。
No write since last change (:quit! overrides) |
:q! |