The file has been changed since reading it · Issue #18290 · neovim/neovim
https://github.com/neovim/neovim/issues/18290
起票者が「これ以上時間使いたくないのでローカルでパッチ当て続けることにしたわ、こっちは閉じる」と。かなしいなぁ
まあそういうこともあるよね、パッチ当てるよりもコミッターを納得させる方がダルいのであれば……
CIFS (SMB) マウントしたディレクトリにメモを置いてあって neovim で編集したりするので、割とこれ私にも刺さるイスューだったのだが。
feat: ":write!" skips "file changed" warning #18665 · neovim/neovim@2a3cb08 · GitHub
https://github.com/neovim/neovim/commit/2a3cb0893b03aeff4d8c0b2116cbddda53bba5a2
とりあえず :w の代わりに :w! を使うと抑制できるらしい。うーん……
話題にされているのは vim が編集中ファイルの最終更新日時を記憶していて、書き込み時に改めて比較して前回読んだときから更新されていたか確認する (更新されていたら vim 外での更新と見做して警告する) という機能。
一部のネットワークファイルシステムでは基本的にメタデータ (更新日時含む) がクライアント側にキャッシュされていたりするためローカルでの更新日時とサーバでの更新日時が厳密には一致せず (時計のズレや通信遅延ゆえ)、ゆえに毎回ファイルを上書き保存するたびに「前回保存時の (ローカルの) タイムスタンプと、書こうとしているファイルの (リモートで設定された) タイムスタンプが一致しない」ということになるらしい。
解決策として「メタデータのキャッシュをやめて必ず通信で取得する」というマウントオプションを設定する手があるが、つまりこれは ls -l とかでファイルの更新日時を列挙するたびにファイルの数だけメタデータのクエリが飛ぶということであり、パフォーマンスへの影響もそれなりにあるので vim のためだけに設定したいかというと……