回答:
これはかなり単純です:
:autocmd CursorHold *
\ let save_modified = &modified |
\ silent! execute 'write' fnameescape(tempname()) |
\ let &modified = save_modified
ただし、これには:new、最初のトリガーでバッファに名前を付けるという副作用があります。(これは、既存のファイルには影響を与えません。これは間の差である:writeと:saveas。)あなたはどちらか(別のチェックを追加することができますempty(bufname('')))と、アンドゥを経由している:0file、または完全な機能レベル下げるように移動します。
:autocmd CursorHold * call writefile(getline(1, '$'), tempname())
このアプローチの注意点は、ファイルの内容が常に保持されることです。
'encoding'設定で'fileencoding'は、元のバッファーのカスタムが失われます。map()は、によって返されたリストを介して復元できますgetline())。
:[range]w !command。