Vimを「tail -f」のように動作させるには?

Vimを「tail -f」のように動作させるには?

VimをEven bestのように振る舞う方法があるかどうか疑問に思いますtail -f
Vimプラグイン今まで私が見つけたことは私の期待に応えません。

ドキュメントが更新されるのを見たいです。リアルタイム。私は私がキーボードから離れていても、Vimはバッファを再ロードして最後の行にジャンプしたいと思います。

どうすればいいですか?
(一部のログファイルのサイズは非常に大きいため、ファイル全体を再ロードしたくありません。最後の数行だけをロードすることをお勧めします。tail -f

答え1

あなたは自分自身との組み合わせvimのように振る舞うことはできませんtail -flessvimtail -f

永遠にフォワード(フォロー)モード

lessF押すか、パラメータとして渡すこと+Fができる永遠に前方モードがあります。

$ less +F

このモードでは、動作はファイルの終わりに達しても読み取りを停止しないようlessです。tail -f新しいデータでファイルを継続的に更新します。このモードを終了するには、を押しますCtrlc

構文強調

less読み取ったデータの自動フィルタリングをサポートします。というプログラムがあります。強調されたソース基本的なソースコードの強調表示を実行できます。とうまく機能するツールが付属していますless。これを使用するには、LESSOPEN環境変数を適切に設定するだけです。

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"

lessまた、生の端末エスケープシーケンスを渡すようにフラグを渡す必要があります(このシーケンスは端末にテキストの色付け方法を伝えます)-Rless環境変数を設定して、常にフラグが渡されるふりをすることができます。-RLESS

 export LESS=' -R '

いつ十分lessではありませんか?

viに似たキーバインディングがありますが、lessVimとは異なります。時々不均一な感じがあり、ctags統合やテキスト編集機能などの重要な機能が欠けています。

を押して、Vimが現在見ているlessファイルを呼び出すことができます。 Vimの正確な位置にカーソルを置くこともできます。 Vimを終了すると、戻ってくる自分に気付くでしょう。 Vimの使用中にファイルを変更すると、その内容が 。EDITOR=vimvlesslessless

答え2

短くてあまりにも無駄な点が好きです。必要に応じてex(vimから)でこのオネライナを実行できます(またはログファイルを開くときに使用する各コマンドをvimrcに入れることができます)。

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

(ほとんどのファイルの最後に移動するには、フィードキーと一緒に "lh"の代わりに "G"を使用します。)

説明する:

  • autoread:外部から変更したときにファイルを読み込みます。 (しかしそれ自体はうまくいきません。内部タイマーなどはありません。vimがexコマンドのようなことをするときにのみファイルを読みます。:!
  • CursorHold * checktime:ユーザーが指定された時間updatetime(デフォルトは4000ms)以内にカーソルを移動しないときに実行checktime、ファイルの外部で変更を確認する
  • call feedkeys("lh"):カーソルが右に1回移動し、左に1回移動します。これは何も起こりません(つまり、CursorHoldトリガーされたことを意味します)。リング)

使用中にスクロールを停止するcall feedkeys("G")には、:set noautoreadvimはファイルが変更されたことを知らせ、変更内容を読むかどうかを尋ねます。

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

*したがって回答(答えを参照してくださいパンハイグァンそしてコメント偶然)

答え3

vim --servername TAIL_VIM /tmp/somefile

これで、他のシェル(bashなど)で次のことができます。

while true
do
    inotifywait --event modify /tmp/somefile \
    && vim --servername TAIL_VIM --remote-send '<C-\><C-N>:edit!<CR>G';
done

<C-><CN>がvimを通常モードで強制すると、「edit!」はvimに現在のファイルを再ロードするように指示し(CRはEnterキーを押すことをシミュレートします)、Gはファイルの一番下に移動しますします。 (G)を削除すると、入力が入ったときにファイルを簡単に確認できます。

答え4

同じ非再帰的アプローチ:

cmap tailf<CR> call Tailf()<CR>
         function! Tailf()
    "Press C-c to stop tailing
        while 1
            e                                  
            normal G
            redraw
            sleep 1
        endwhile
    endfunction

関連情報