Com :!
, o comando externo é executado em um shell e a saída fugaz não é capturada dentro do Vim; você apenas vê o que é impresso no terminal, então o controle retorna ao Vim após o comando externo terminar.
Para manter a saída, você precisa lê-la em um buffer do Vim . Para isso, há o comando :read!
. Para abrir um novo buffer scratch , combine isso com :new
:
:new | 0read ! <command>
Se você quiser passar o nome do arquivo do buffer atual ( %
) para o comando externo, use :execute
, para que ele já seja avaliado no buffer atual:
:execute 'new | 0read ! interpreter' expand('%')
Ou você usa o fato de que com um novo buffer, o anterior se torna o alternativo e usa #
em vez de %
:
:new | 0read ! interpreter #
Livre-se do buffer de rascunho com :bdelete!
.
Se você quiser ver a saída de forma assíncrona enquanto ela é executada, você precisa de um multiplexador externo ou um plugin, como mencionado na resposta @chaos.