Como enviar a saída cmd para o arquivo tmp enquanto visualiza simultaneamente o arquivo tmp no vim

1

Eu sempre me encontro em uma situação em que gostaria de enviar a saída para um arquivo temporário e, em seguida, usar o VIM para abrir o arquivo temporário e inspecionar os resultados. Eu vim com o seguinte, que geralmente parece funcionar muito bem:

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
}

A saída de cmd é colocada em um arquivo temporário e é aberta no vim. Eu também tenho o seguinte no meu .vimrc para tornar o recarregamento muito fácil:

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

Isso me permite "atualizar" facilmente o arquivo temporário à medida que novos dados são adicionados.

Isso funciona muito bem quando eu tenho um comando "gerador" simples como tail ou adb logcat . mas se eu quiser usar um comando mais complexo, como o comentou um com um pipe para grep acima, ele não funciona - eu não vejo nada no meu arquivo temporário.

O que há de errado com minha função de shell?

    
por awm129 29.06.2017 / 22:22

1 resposta

1

Isso é o que o autoread faz:

: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.

Eu tenho que admitir, porém, que isso nunca funcionou de maneira satisfatória para mim. Dependendo de vim tendo foco ou não, pode ou não funcionar. O recurso quebrou completamente para mim ao usar um gerenciador de janelas lado a lado. Mas experimente, talvez esteja funcionando para você. Caso contrário, existem alternativas mais inteligentes no mercado.

    
por 30.06.2017 / 00:55