:w
git で対話的にリベースした後、 vim で開いているファイルがファイル システム上で変更されていることに頻繁に気付きます。または を使用してファイルを書き込もうとすると:w!
、プロンプトWARNING: The file has been changed since reading it!!!
/が表示されますDo you really want to write to it (y/n)?
。
この警告は十分妥当だと思います。ファイル システム上のファイルが任意の理由で変更された場合、それを黙って上書きするのは問題のある動作です。ただし、ファイルが変更された理由がわかっているこのようなケースでは、プロンプトがあるかどうかを確認するのではなく、強制的に書き込みたいと思うことがよくあります。プロンプトに気付かず、すぐにタブで移動したためにビルドが不整合になり、場合によってはデータが失われる状況もありました。
確認プロンプトを永久に、または (できれば) に類似した拡張コマンドを使用して削除するにはどうすればよいですかw!
?
これを Google で検索すると、 を使用した読み取り専用ファイルの強制書き込みについては多くのヒットが表示されますw!
が、変更されたファイルの強制書き込みについては何も見つからないようです。
答え1
次のコマンドは現在のバッファに対して機能します (複数のバッファに対する解決策はわかりません)。
:w !sudo tee %
文字は%
現在のファイル名を表します。このsudo
コマンドは読み取り専用として開かれたファイルを上書きすることを可能にします。
:w!!
上記を実行するコマンドを定義するには、以下を追加します.vimrc
:
cmap w!! w !sudo tee > /dev/null %
この部分は、ここでは使用されない> /dev/null
標準出力を削除します。tee
詳細については、投稿をご覧ください。 vim の「write with sudo」トリックはどのように機能しますか?