如何将 cmd 输出发送到 tmp 文件,同时在 vim 中查看 tmp 文件

如何将 cmd 输出发送到 tmp 文件,同时在 vim 中查看 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 管道的命令,它不起作用 - 我在临时文件中看不到任何内容。

我的 shell 功能出了什么问题?

答案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是否集中注意力,它可能有效,也可能无效。当使用平铺窗口管理器时,该功能对我来说完全崩溃了。但尝试一下,也许它对你有用。否则,市场上还有更聪明的替代品。

相关内容