テキストエディタが変更なしで保存時に変更時間を設定するのはなぜですか?

テキストエディタが変更なしで保存時に変更時間を設定するのはなぜですか?

Sublime を使用して変更がない場合は、エディタのアイコンにファイルが変更されていないと表示されます。

ただし、[保存] をクリックすると、ファイルシステムの mtime 時間が現在に設定されます。

不変の保存は実際に「修正された」時間を更新する必要がありますか?


簡単な例:

空のファイルの作成

$ touch example.file
$ stat -l example.file 
-rw-r--r-- 1 matthew staff 0 Jul  9 14:45:41 2013 example.file

タッチするとmtimeが更新されます。

$ touch example.file
$ stat -l example.file
-rw-r--r-- 1 matthew staff 0 Jul  9 14:45:57 2013 example.file

変更せずに編集すると、mtimeも更新されます。

$ vim example.file
# :wq # write and quit, making no changes
$ stat -l example.file
-rw-r--r-- 1 matthew staff 0 Jul  9 14:46:10 2013 example.file

ベストアンサー1

不変の保存は実際に「修正された」時間を更新する必要がありますか?

はい、アプリケーションがファイルを書き込むとき、オペレーティングシステムはそのデータをディスクに書き込むためです。すでにファイル内のデータとまったく同じかもしれませんが、オペレーティングシステムはこれが真であることを確認したり気にしません。もちろん、テキストエディタは各保存のためにファイル全体を素直に作成しないことを願っています。なぜなら、私は非常に頻繁に保存し、無意味にディスクを磨耗させたくないからです(おそらく、OSのファイルキャッシュと同期がこの問題を改善する可能性があるため、プログラムが勝利しました)。心配する必要はありません)。

多くのアプリケーション(vimを含む)は、自分がロードするファイルが外部から変更されたときにそれを認識してユーザーに通知します。私は彼らがmtimeに基づいてこれをやっていると思いましたが、クイックチェックでtouch少なくともvimの場合は状況がそれほど単純ではないことを示しています(vimが変更が行われたことをどのように知っているかについて質問をします)。 )2つのバージョンのハッシュを比較しますか? )。私のポイントは、アプリケーションがファイルの外部変更を監視している場合は、ファイル全体を書き換えることなく変更を安全に保存できることです。この場合、変更されていないファイルを保存すると、何もしないと考えることができます。ただし、ユーザーが保存を要求しているため(ユーザーが必要かどうかを知っているかわかっている場合でも)、これを反映するには、アプリケーションが少なくともファイルをタッチする必要があるようです。たとえば、次のような場合に価値があるかもしれません。このアップデートが意味がない場合でも、最後のアップデートを反映するためにタイムスタンプに頼っています。

結局のところ、いいえタイムスタンプを変更したい場合は、変更されていない文書を保存する必要はありません。

おすすめ記事