vimでtmpファイルを表示しながらcmd出力をtmpファイルに送信する方法

vimでtmpファイルを表示しながらcmd出力をtmpファイルに送信する方法

出力を一時ファイルに送信してから、VIMを使用して一時ファイルを開き、結果を確認したい場合があります。私は一般的にうまく機能する次のアプローチを考えました。

function viewlog()
{
    local d="/tmp/viewlog"
    #local cmd="adb logcat"
    local cmd="tail --follow=name /var/log/syslog"
    #local cmd="tail --follow=name /var/log/syslog | grep myProcess"
    local stopmsg="TERMINATED"

    # setup temp file
    mkdir $d
    local fn=$(mktemp -p $d --suffix=".log")

    # start redirecting cmd to the tmp file in a subshell
    ( ( eval $cmd >> $fn && echo -n "$stopmsg") & ) 2> /dev/null
    local pid=$!

    # open the temp file in vim
    vim $fn +

    # kill the cmd when I exit vim
    kill $pid
    wait $pid
}

出力はcmd一時ファイルに保存され、vimで開きます。また、非常に簡単にリロードできるように、.vimrcには次のものが含まれています。

map <F5> <ESC>:e!<CR>G

これにより、新しいデータが追加されたときに一時ファイルを簡単に「更新」できます。

tailこれは、またはなどの単純な「ジェネレータ」コマンドがある場合に便利ですadb logcat。ただし、上記でコメントされたgrepパイプなどのより複雑なコマンドを使用したい場合は機能しません。一時ファイルには何も表示されません。

シェル機能にはどのような問題がありますか?

答え1

これはautoread

:help autoread
When a file has been detected to have been changed outside of Vim and                      
it has not been changed inside of Vim, automatically read it again.                        
When the file has been deleted this is not done.

しかし、私はこれが私に満足していなかったことを認めなければなりません。vim集中するのか、しないのかによって、効果があるかもしれないしないかもしれません。タイリングウィンドウマネージャを使用すると、この機能は完全には機能しません。しかし、一度試してみてください。おそらくそれはあなたに役立ちます。そうでなければ、市場にはよりスマートな選択肢があります。

関連情報