保存して終了する
「Vimから出られない」で有名な部分です。仕組みが分かってしまえば単純で、: を押してコマンドを打つだけ。終了できないときに何が起きているのかも、ここで確かめておきます。
なぜ終了できないのか
保存していない変更があるときに :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! | 保存せずに終了 |