6

通常、vim で実際にファイルを編集することはありません。を実行vim foo、編集、書き込み、終了すると、vimはリンクを解除fooし、新しいファイルと という名前の新しいリンクを作成しますfoo。ただし、ファイルに複数のリンクがある場合は、vim実際にファイルを変更します。例えば:

$ ls -i foo
19428852 foo
$ vi foo
$ ls -i foo
19428857 foo
$ ln foo bar
$ vi bar
$ ls -i bar
19428857 bar

ファイルを実際に編集する方法を探していたところ、2 つの選択肢があるようです。を使用するedか、使用しますvimが、編集する前にファイルへのリンクが少なくとも 2 つあることを確認してください。リンクが1つしかない場合、vimが新しいファイルを作成することは実際には問題ではなく、編集中にリンクが作成された場合、vimは正しいことを行うように見えるため、質問は学術的なものだと思いますが、興味があります:

新しいファイルを作成せずに、vim に常にファイルを編集させることは可能ですか?

4

3 に答える 3

11

backupcopyオプションのヘルプとcrontab特に注意事項を確認してください。短い答えは

:set backupcopy=yes
于 2012-06-15T01:40:49.437 に答える
2

秘訣は、元のファイルを安全に上書きできるようにバックアップファイルを使用するようにVimに指示することです。そうしないと、Vimは新しいファイルに書き込み、名前を変更して元のファイルを置き換えます。

そして、Vimにバックアップファイルをどこにも書き込まないように指示します。このように、通常の書き込みコマンドは失敗し、書き込みを強制する必要があります。

:set noswapfile
:set backupcopy=yes
:set backupdir=''
:e big
(hit Crtl-C to stopo line count and syntax highlight)
(edit the file)
:w!

ファイルシステムレベルで何が起こっているかを実際に確認するために、inotifyツールを使用しました。

inotifywait -m -r /path/to/my_test_dir/

ただし、これは非常に大きなファイルではうまく機能しないことに注意してください。たとえば、この方法で10Gファイルを編集しようとして、1.5 GBの切り捨てられたファイルになってしまい、残りのデータが失われました。そしてVimはほぼ2GBのRAMを使用することになりました...

他のオプションは、MMap関数を使用することです。Pythonコマンドラインで。

于 2012-11-09T12:18:44.277 に答える
2

クイックグーグルはこのリンクを示しています - Editing a hard link to a file。それを制御するコマンドは

set backupcopy=auto,breakhardlink
于 2012-06-15T01:44:01.357 に答える