← Vim道場

保存して終了する

「Vimから出られない」で有名な部分です。仕組みが分かってしまえば単純で、: を押してコマンドを打つだけ。終了できないときに何が起きているのかも、ここで確かめておきます。

第6章 まとめて片づけるレッスン 30 / 36

なぜ終了できないのか

保存していない変更があるときに :q を実行すると、Vimは E37: No write since last change というエラーを出して終了を拒みます。うっかり変更を捨てないための安全装置です。

ここで慌てて適当なキーを叩くと状態がさらに分からなくなるので、まず Esc を押してノーマルモードに戻り、保存するなら :wq、変更を捨てるなら :q! と打ちます。この2つを覚えておけば詰みません。

! は「強制」の印

Exコマンドの末尾に付ける ! は「警告を無視して実行する」という意味です。:q! のほか、読み取り専用ファイルに書き込む :w! などでも同じように使います。

複数のファイルを開いているときは :wa(すべて保存)や :qa(すべて閉じる)も使えます。:xa なら変更のあるファイルだけ保存して全部閉じます。

:x と :wq の違い

:wq は変更が無くても必ず書き込みますが、:x は変更があるときだけ書き込んで終了します。書き込むとファイルの更新時刻が変わるので、更新時刻を見て動く仕組み(ビルドツールやファイル監視)を使っているときは、この違いが効いてきます。

普段づかいでは :x のほうが無駄がありません。手が :wq に慣れているならそのままでも困りませんが、意味が違うことは知っておくと役に立ちます。

書き込めないと言われたとき

権限が足りないファイルを開いて編集してしまうと、:w が失敗します。Vimであれば :w !sudo tee % > /dev/null と打つことで、開き直さずに書き込めます。ファイルの中身を sudo 経由の tee に流し込む書き方です。

Neovimではこの方法が使えません。パスワードの入力を受け取れないためで、suda.vim のようなプラグインを使うか、いったん別の場所に保存してから sudo で移すことになります。

スワップファイルの警告

ファイルを開いたときに E325: ATTENTION という警告が出ることがあります。Vimは編集中の内容をスワップファイルに書き出していて、前回が正常に終了しなかった場合にこれが残るためです。

他の場所で同じファイルを開いているなら閉じます。前回クラッシュしたのであれば、R を選んで復元してから内容を確認し、問題なければ :e で開き直してスワップファイルを消します。慌てて D を選ぶと、復元できたはずの変更を捨てることになります。

このレッスンで扱うキー

キー動き
:w保存する
:q終了する
:wq保存して終了
:q!保存せずに終了

関連記事

レッスン一覧へ戻るキーの逆引き一覧検定を受ける