web-dev-qa-db-ja.com

Vimでテキストファイルを編集してもtail -fが更新されない

tail -f a.txtを使用して、a.txtというファイルの更新を監視しています。

2番目の仮想コンソールでls -a >> a.txtなどを使用してファイルを更新すると、最初の仮想コンソールに変更がリアルタイムで表示されます。

2番目の仮想コンソールでVimを使用してファイルを更新すると、最初の仮想コンソールに変更が表示されません。

私は必ずしもそのウィンドウで更新がトリガーされるとは限りませんが、これがtail -fコマンドを実行している端末を正確に更新しないのはなぜですか?

17
alex

vimを使用してファイルを編集すると、通常はファイルがメモリに読み込まれ、新しいファイルが書き込まれます。そのため、tailはファイルの古いコピー(tail(および他のプログラム)がその使用を停止するまでファイルシステムに残ります)で動作しています。

tailを(ファイルではなく)ファイル名に従うようにすることができます。

tail -F yourfile  

大文字Fに注意してください。

31
Bob Eager

私の理解では、通常vimを使用して編集する場合は、ファイルのコピーを編集しており、変更内容をディスクに書き込むと、ファイルのコピーが移動します。これは元のファイルをunlinkingし、新しいファイルをmoveingすることによって発生するため、tailは元のファイルへの新しい変更を認識しません。

8
DopeGhoti