vimで保存して終了する方法|:wq・:x・ZZの使い分けと注意点

コマンドリファレンス

vim で編集中のファイルを保存して終了する基本コマンドは :wq です。ノーマルモードで :wq と入力して Enter を押すと、変更内容を保存したうえで vim が終了します。
この記事では :wq:xZZ の使い分けと、保存や終了に失敗するときの対処法を、実機での動作確認結果とあわせて解説します。

vimを保存して終了する方法(結論)

編集中に文字が入力できる状態(インサートモード)になっている場合は、まず Esc キーでノーマルモードに戻ります。そのうえで次のいずれかを入力してください。

:wq

→ Enter を押すと、変更内容を保存してvimが終了します。迷ったらこれを使えば確実です。

構文(Syntax)

保存・終了系のコマンドはいずれもノーマルモードで実行します。コロン(:)から始まるコマンドは Enter で確定、ZZZQ は2文字のキー入力だけで即座に実行される点が異なります。

[Esc] [コマンド] [Enter]   例: Esc → :wq → Enter
[Esc] [ZZ または ZQ]        例: Esc → ZZ(Enter不要)

主なコマンド一覧

コマンド動作備考
:w上書き保存する(終了しない)編集を続けたいときに使う
:q変更がなければ終了する未保存の変更があると E37 エラーで終了できない
:wq保存して終了する変更の有無にかかわらず常に上書き保存する
:x変更があるときだけ保存して終了する変更がなければファイルを書き換えずに終了(更新日時も変わらない)
ZZ:x と同じ(ノーマルモードのショートカット)コロン入力・Enter不要でそのまま終了
:q!変更を破棄して終了する保存せずに終了したいときに使う(強制終了)
ZQ:q! と同じ(ノーマルモードのショートカット)保存せず即終了
:wq!読み取り専用でも上書きを試みて保存終了するOS側の書き込み権限がない場合は失敗する(後述)

実行例(実機で動作確認済み)

編集して保存し、終了する(:wq)

  1. vim sample.txt でファイルを開く
  2. i でインサートモードに入り、内容を編集する
  3. Esc でノーマルモードに戻る
  4. :wq と入力して Enter

→ 変更内容が保存され、vimが終了します。:wq は変更がなくてもファイルへの書き込みを実行するため、実機での検証でも更新日時(mtime)が毎回変わることを確認しています。

変更がなければ書き込まずに終了する(:x / ZZ)

ファイルを開いただけで何も編集していない場合、:x または ZZ を使うと余計な書き込みが発生しません。

:x

→ 変更がある場合のみ保存して終了し、変更がなければファイルを書き換えずにそのまま終了します。実機検証でも、無変更時は更新日時が変わらないことを確認済みです。ノーマルモードで ZZ(2回連続で入力)と打っても同じ結果になります。

変更を保存せずに終了する(:q!)

誤って編集してしまった場合や、変更を反映したくない場合は次のコマンドで保存せずに終了できます。

:q!

→ 編集内容は破棄され、ファイルは開く前の状態のまま終了します。何も変更していない状態で :q だけを使うと同様に終了できますが、変更がある状態で :q だけを実行すると次のようなエラーになり終了できません。

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

→ 保存したい場合は :wq、破棄したい場合は ! を付けて :q! を使います。

注意点:保存や終了に失敗するケース

読み取り専用ファイルを保存しようとしてエラーになる

vim -R で開いた場合や、ファイル自体に書き込み権限がない場合、:wq:w を実行すると次のエラーが表示され保存できません。

E45: 'readonly' option is set (add ! to override)

! を付けて :wq! を実行すると上書きを試みますが、OSレベルで書き込み権限がない場合は次のエラーになり、結局保存できません(実機検証済み、ファイルの内容は変更されず保持されます)。

E212: Can't open file for writing

→ この場合は一度 :q! で終了し、ファイルの所有者や権限を確認したうえで開き直す必要があります。権限の仕組みは以下の記事で解説しています。

root権限が必要なファイルを編集している

/etc/hosts のようなroot所有のファイルを一般ユーザーで開いて編集した場合も、保存時に E212 エラーになります。

vim /etc/hosts
:wq
E212: Can't open file for writing

→ 編集前に sudo vim /etc/hosts のように sudo を付けて開き直してください。sudo の使い方は下記の記事で詳しく解説しています。

関連コマンド・関連記事

備考

  • 環境依存: 多くの Linux で vi コマンドは vim にリンクされていますが、BSD 系では別物の場合があります。
  • 大文字小文字の違い: ZZ(保存して終了)と ZQ(保存せず終了)は、いずれも大文字2文字で入力します。小文字の zz は別のコマンド(カーソル行を画面中央に表示)なので注意してください。
  • 設定ファイル: ユーザー単位の設定は ~/.vimrc、システム全体の設定は /etc/vim/vimrc が利用されます。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント