VimをEven bestのように振る舞う方法があるかどうか疑問に思いますtail -f
。
Vimプラグイン今まで私が見つけたことは私の期待に応えません。
ドキュメントが更新されるのを見たいです。リアルタイム。私は私がキーボードから離れていても、Vimはバッファを再ロードして最後の行にジャンプしたいと思います。
どうすればいいですか?
(一部のログファイルのサイズは非常に大きいため、ファイル全体を再ロードしたくありません。最後の数行だけをロードすることをお勧めします。tail -f
)
答え1
あなたは自分自身との組み合わせvim
のように振る舞うことはできませんtail -f
。less
vim
tail -f
永遠にフォワード(フォロー)モード
less
F押すか、パラメータとして渡すこと+F
ができる永遠に前方モードがあります。
$ less +F
このモードでは、動作はファイルの終わりに達しても読み取りを停止しないようless
です。tail -f
新しいデータでファイルを継続的に更新します。このモードを終了するには、を押しますCtrlc。
構文強調
less
読み取ったデータの自動フィルタリングをサポートします。というプログラムがあります。強調されたソース基本的なソースコードの強調表示を実行できます。とうまく機能するツールが付属していますless
。これを使用するには、LESSOPEN
環境変数を適切に設定するだけです。
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
less
また、生の端末エスケープシーケンスを渡すようにフラグを渡す必要があります(このシーケンスは端末にテキストの色付け方法を伝えます)-R
。less
環境変数を設定して、常にフラグが渡されるふりをすることができます。-R
LESS
export LESS=' -R '
いつ十分less
ではありませんか?
viに似たキーバインディングがありますが、less
Vimとは異なります。時々不均一な感じがあり、ctags統合やテキスト編集機能などの重要な機能が欠けています。
を押して、Vimが現在見ているless
ファイルを呼び出すことができます。 Vimの正確な位置にカーソルを置くこともできます。 Vimを終了すると、戻ってくる自分に気付くでしょう。 Vimの使用中にファイルを変更すると、その内容が 。EDITOR=vim
vless
less
less
答え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 noautoread
vimはファイルが変更されたことを知らせ、変更内容を読むかどうかを尋ねます。
私は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