vim で tail -f を実行して色付きの出力を表示するにはどうすればよいですか?

vim で tail -f を実行して色付きの出力を表示するにはどうすればよいですか?

この質問ジルは答えた

さらに別の可能性としてはtail -fエマックシェル バッファを使用して、Emacs の構文の色分け機能を使用します。

私はvimユーザーなので、これをヴィム、 ないエマック.
ヴィムこの機能はありますか?

答え1

Python や、Vim がサポートし、スレッドを持つその他のスクリプトで、バッファをリアルタイムに変更するためのマルチスレッド プラグインを作成できます。

しかし、私の知る限り、これはターミナルでのみ機能します。少なくとも X11 では、GUI が別のスレッドによって変更されると、GUI バージョンはクラッシュします。

他のプログラムを受け入れる場合は、grcそしてcczeストリームを色付けすることができます。

答え2

短く、ハッキングや外部スクリプトをあまり使用しないのが気に入っています。必要に応じて、このワンライナーを ex (vim 内) から実行できます (または、ログ ファイルを開いたときに各コマンドを vimrc に記述します)。

:set autoread | au CursorHold * checktime | call feedkeys("lh")

さらに:set syntax=logtalkログに色を付けることもできます

(ファイルの末尾に(ほぼ)ジャンプしたい場合は、フィードキーで「lh」の代わりに「G」を使用します)

説明:

  • autoread: 外部から変更があったときにファイルを読み取ります (ただし、それ自体では動作しません。内部タイマーなどはありません。vim がアクションを実行したときのみ、たとえば ex のコマンドのようにファイルを読み取ります)。:!
  • CursorHold * checktime: カーソルが指定された時間updatetime(デフォルトでは4000ミリ秒)ユーザーによって動かされない場合checktime、ファイル外からの変更をチェックするが実行されます。
  • call feedkeys("lh"): カーソルが一度右に動いて左に戻ります。その後何も起こりません(...つまり、それがCursorHoldトリガーされ、ループ

使用時にスクロールを停止するにはcall feedkeys("G")、以下を実行します:set noautoread。これで、vim はファイルが変更されたことを伝え、変更を読み取るかどうかを尋ねます。

私は、ログファイルを vim で監視する (tail -f の代わりに) というアイデアが好きです。たとえば、screen/tmux なしで ssh セッションで作業しているときなどです。さらに、必要に応じてログファイルから直接コピーしたり、出力を直接保存したり、vim でできることは何でもできます :)

*これから答え(回答を参照)ファンハイクアンそしてコメントフルクス

関連情報