変更されたバッファを一時ファイルに書き込む


7

現在編集中の変更されたバッファーを一時ファイルに定期的に書き込みたいのですが。バックグラウンドで、たとえば、外部ツールを使用してファイルを分析できます。

このプロセスでファイルを実際の場所に書き込みたくありません-通常の:wコマンドを使用してユーザーにその処理を任せます。

CursorHold自動コマンドによって呼び出されるvimscriptでこれを行うにはどうすればよいですか?Vim 7.4以降で問題ありません。


を使用して、バッファーのコンテンツ(または部分)で外部ツールを直接実行できます:[range]w !command
romainl 2015年

回答:


8

これはかなり単純です:

: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())

このアプローチの注意点は、ファイルの内容が常に保持されることです。

  • Vimの'encoding'設定で'fileencoding'は、元のバッファーのカスタムが失われます。
  • Unix(LF)の行末(これmap()は、によって返されたリストを介して復元できますgetline())。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.