web-dev-qa-db-ja.com

tail -fにvimで色付きの出力を表示させる方法は?

この中で 質問 、Gillesは答えました

さらに別の可能性は、Emacsシェルバッファーでtail -fを実行し、Emacsの構文カラーリング機能を使用することです。

私はvimユーザーなので、emacsではなくvimでこれを実行したいと思います。
vimにはこの機能がありますか?

9
Benjamin

マルチスレッドプラグインを記述して、PythonまたはVimがサポートし、スレッドを持っているその他のスクリプトで、バッファーをリアルタイムで変更できます。

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

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

2
lilydjwg

私はそれが短く、ハッキングや外部スクリプトがあまりないのが好きです。このonelinerは、必要に応じてex(whithin 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"):カーソルが左右に1回移動します。その後、何も起こりません(...つまり、CursorHoldがトリガーされます。つまり、loop)があります。

call feedkeys("G")を使用しているときにスクロールを停止するには、_:set noautoread_を実行します-これで、vimはファイルが変更されたことを通知し、変更を読み取りたいかどうかを尋ねます)

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

*これから answerPhanHaiQuang による回答と flukus によるコメントを参照)

0
eli