3

私のvimrcには次の行があります:

redir! >/Users/seanmackesey/.vim/.vimmessages

しかし、メッセージが生成された直後にこのファイルに表示されるわけではありませんtail -f .vimmessages。シェルで実行すると、メッセージがゆっくりと、やや不規則に表示されます。コマンドを実行すると、メッセージの大きなダンプが時々:messages表示されますが、パターンが何であるかを正確に把握できません。各メッセージが発生したときに、すぐにファイルの最後に単純に追加する方法はありますか?

4

2 に答える 2

3

グローバルの問題は、:redirネストしないことです。そのため、を使用するマッピングや関数でもエラーが発生します:redir。むしろ、使用する

:set verbosefile=/Users/seanmackesey/.vim/.vimmessages

すべてのメッセージをキャプチャします。ただし、Vimの実装ではバッファリングされた出力を使用するため、ある程度のチャンクが発生します。

この出力をどこで使用するかについて言及していなかったため、より適切な推奨事項を提示することは困難です。外部ファイルへの即時出力が本当に必要な場合はwritefile()、埋め込みスクリプト言語を使用するか、使用してファイルを作成およびフラッシュする必要があります。

于 2013-02-20T07:42:09.093 に答える
1

これは、特定の時間遅延ではなく、単純なデータバッファリングである可能性が高いようです。

Vim 7.3のソースを調べたところ、fopenputsputcfclose(つまり、stdio)redirで実行されているようです。fflushsetbufsetbuffersetlinebuf、またはsetvbufの呼び出しはなかったため、リダイレクトでは常にシステムのstdioが提供するデフォルトのバッファリング(おそらく便利なサイズの「ブロックバッファリング」)が使用されます。

定期的にリダイレクトを停止して再開し、データを効果的にフラッシュできます。

redir END | redir! >>~/.vim/.vimmessages

redirそれを除けば、ファイルに対してやりたいことをする良い方法はないようです。

于 2013-02-20T07:43:48.017 に答える