Respostas:
Sim, por exemplo, se você quiser fazer ls
, tente:
:!ls
Para gerar uma concha, use
:shell
:w !sudo tee %
nano
Costumo ctrl+z
dormir o vi, executar o que preciso no shell e depois fg
retomar o vi. Não é exatamente uma resposta para sua pergunta, mas acho que é uma maneira muito rápida de trabalhar.
Se você esquecer que possui o vi aberto em segundo plano (isso pode acontecer quando você estiver ocupado), quando tentar sair do shell usando ctrl+d
o aviso de que você tem trabalhos em segundo plano em execução e poderá fechá-los, ou pressione ctrl + d novamente para sair. Além disso, se você tentar reabrir o mesmo arquivo duas vezes, receberá um aviso de recuperação, para poder pressionar a
para abortar e executar fg para voltar ao vi.
Como você mencionou "get the stdout", observe que você pode fazer
:r! command
e a saída do comando será adicionada ao arquivo, ou
:<range>!command
filtrar o conteúdo do intervalo através do comando [por exemplo :1,$!wc
]
:%!command
parece bem útil
:.,+20 !sort
]
Meu idioma preferido é
!!command
que é uma abreviação de
:.!command
que canaliza a linha atual através do comando e insere a saída no arquivo. O caso mais comum para mim é editar o comando com vi e executar:
!!sh
Ou
!<motion>command
como (por exemplo)
!apsh
para executar todo o parágrafo atual através do shell.
!}
você deve estar posicionado no início do parágrafo, tente !ap
. (Não sei se isso é em todos os vi, ou apenas vim)
Usando dois pontos e ponto de exclamação, você pode executar qualquer comando no caminho e nos scripts do shell, lembre-se de que o comando é executado sob o usuário que executa o programa vi / vim e usa seu ambiente.
:!<command>
Como o vi usa o ambiente que estava em vigor quando foi executado, ele usa o mesmo caminho que estava no comando pai. Lembre-se de que alguns shells mantêm um cache dos programas no caminho e o vi pode não funcionar com esse cache (dependendo do shell que ele usa e da sua versão); portanto, você pode acabar executando o binário errado, caso tenha mais de um binário com o mesmo nome.
Você pode ver a saída de um comando digitando, por exemplo, :!ls -lh
no modo de comando.
Se você deseja inserir a saída do comando no arquivo que está editando, basta adicionar um r
. Por exemplo :r!which perl
,.
Eu tenho isso no meu .vimrc. Encontrado no Stack Overflow há um tempo:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Eu resolveria isso com facilidade no Linux, abrindo duas janelas de linha de comando do terminal, executando o vi em um e outro disponível para outro trabalho ao mesmo tempo.