Considere qualquer linguagem de programação interpretada.
Posso executar o script atualmente aberto usando ! interpreter %
e usar a tecla return para retornar ao vim após o término da execução.
É de alguma forma possível não substituir a janela atual pela saída do comando shell executado, mas abrir a saída em um novo painel dividido? Gostaria de ainda ver meu código-fonte durante a execução do meu script.
Eu tentei :split ! interpreter %
, mas não funcionou.
Há algum caminho? Estou usando o vim 7.3.
Responder1
Com :!
, o comando externo é executado em um shell e a saída passageira não é capturada dentro do Vim; você apenas vê o que é impresso no terminal e o controle retorna ao Vim após a conclusão do comando externo.
Para manter a saída, você deve lê-la em um Vimamortecedor. Para isso existe o :read!
comando. Para abrir um novoarranharbuffer, combine isso com :new
:
:new | 0read ! <command>
Se você quiser passar o nome do arquivo do buffer atual ( %
) para o comando externo, você deve usar :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 oalternarum, e use #
em vez de %
:
:new | 0read ! interpreter #
Livre-se do buffer temporário com :bdelete!
.
Se você quiser ver a saída de forma assíncrona enquanto ela é executada, você precisa de um multiplexador externo ou plugin, conforme mencionado na resposta @chaos.
Responder2
Pelo que eu sei, você não pode fazer isso em vim
. Mas use um multiplexador de terminal como screen
para isso. Antes de abrir um vim, inicie o multiplexador:
screen
Em seguida, pressione ctrl- a Spara horizontal e ctrl- a |para uma tela derramada verticalmente.
Agora abra um arquivo em vim
uma das telas divididas. E pule para a outra tela usando ctrl- a tab. Observe que, na segunda tela você primeiro precisa abrir uma nova tela ( ctrl- a c) antes de poder utilizá-la.
Na tela com o vim você pode editar o arquivo e na outra tela você pode executá-lo e ver as mensagens e o código permanentemente.
Aqui umreferência rápidapara screen
.