Abra a saída de um comando shell em um painel dividido

23

Considere qualquer linguagem de programação interpretada.

Posso executar o script aberto no momento usando ! interpreter %e usar a chave de retorno para retornar ao vim após a conclusão 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? Eu ainda gostaria de ver meu código fonte durante a execução do meu script.

Eu tentei :split ! interpreter %, mas não funcionou.

Há algum jeito? Estou usando o vim 7.3.

muffel
fonte

Respostas:

29

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 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 buffer do Vim . Para isso, há o :read!comando. Para abrir um novo buffer temporário , combine isso com :new:

:new | 0read ! <command>

Se você deseja passar o nome do arquivo do buffer atual ( %) para o comando externo, é necessário usá- :executelo, 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 temporário com :bdelete!.

Se você deseja ver a saída de forma assíncrona enquanto é executada, é necessário um multiplexador externo ou um plug-in, conforme mencionado na resposta @chaos.

Ingo Karkat
fonte
O comando ": execute ..." acima funciona para mim, mas quando tento vinculá-lo ao pressionamento de tecla F9, use esta entrada .vimrc [nnoremap <buffer> <F9>: execute 'new | 0read! / Usr / bin / env python3 'expand ('% ')], obtenho o seguinte erro: [/ bin / bash: -c: line 0: EOF inesperado ao procurar pela correspondência' '' expand ('%' )]. Tentei várias seqüências de escape, mas acho que não é a correta. = :). Alguma ideia? Obrigado.
NYCeyes
2

Até onde eu sei, você não pode fazer isso vim. Mas use um multiplexador de terminal como screenesse. Antes de abrir um vim, inicie o multiplexador:

screen

Em seguida, pressione ctrl- a Spara horitzontal e ctrl- a |para uma tela derramada vertical.

Agora abra um arquivo vimem 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 usá-la.

Na tela com o vim, você pode editar o arquivo e, na outra tela, pode executá-lo e ver as mensagens e o código permanentemente.

Aqui está uma referência rápida para screen.

caos
fonte
Como alternativa, você pode usar o tmuxmultiplexador e o vim-dispatchplug-in para automatizar a divisão e o salto entre os painéis.
TakeTwo