:w コマンドをマップして、使用時に現在のディレクトリを rsync し、問題のファイルを保存する方法を探しています。理想的には、rsync コマンドによって生成された応答は vim で返される必要がありますが、現在のファイルではなく、ツールチップなどとして返されます。
私は TextMate でこれを達成することができ、現在は Vim での作業を開始しようとしています。のようなことを試してきました:map w :w|!rsync
が、うまくいかないようです。
BufWritePostにフックできます。正確な構文は覚えていませんが、「:he BufWritePost
」と「:he autocommand
」が役に立ちます。
次のような基本的なフックを設定します(パターンはファイルで一致するため、*。your_extensionを実行できます)。
:au BufWritePost * !rsync
また、それをバッファローカルにする方法があるはずです。
ローカル コピーを保持したい場合は、viraptor によって提案された BufWritePost autocmd が最善の策ですが、netrw プラグイン (デフォルトの Vim ランタイム ファイルの一部) がインストールされていると仮定すると、次のコマンドで vim を起動することもできます。
vim rsync://myrsync_server.com/path
ローカルにあるかのようにファイルを編集するだけです。保存すると、リモートサーバーが更新されます。
:help rsync
これを行うためにバッファローカル自動コマンドをセットアップできます ( :help autocmd-buflocalを参照) 。
これにより、バッファへの各書き込み後に rsync を呼び出すように vim が設定されます。
au BufWritePost,FileWritePost <buffer> silent !rsync -a /path/to/somedir/ user@host:/remote/dir/ --exclude=*.sw?
1 つの注意点は、マルチファイル プロジェクトで編集するファイルごとに、これらの自動コマンドのいずれかを設定する必要があることです。これは面倒で、新しいファイル/バッファ用にこれを設定するのを忘れがちです - もちろん、通常の自動コマンドを設定することはできますが、プロジェクトにないファイルへの書き込みのために rsync を起動する必要があります。
rsync-over-ssh を使用すると、これはリモートホストが低遅延のリンクを介してアクセスできる場合に機能します。そうでない場合は、rsync が完了するまで書き込みごとにバッファーがブロックされて以降の更新が行われないため、おそらくそれほどうまく機能しません。エクスペリエンスを向上させるために、次のいずれかをお勧めします
&
コマンドの最後にa を追加して、rsync をバックグラウンドに送信します。YMMV。