É possível digitar um comando bash dentro do vi e obter o stdout?
Acho muitas vezes entediante fechar e reabrir o vi apenas porque quero procurar algo no shell.
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 depoisfg
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 pressionara
para abortar e executar fg para voltar ao vi.fonte
Como você mencionou "get the stdout", observe que você pode fazer
e a saída do comando será adicionada ao arquivo, ou
filtrar o conteúdo do intervalo através do comando [por exemplo
:1,$!wc
]fonte
:%!command
parece bem útil:.,+20 !sort
]Meu idioma preferido é
que é uma abreviação de
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:
Ou
como (por exemplo)
para executar todo o parágrafo atual através do shell.
fonte
!}
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.
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.
fonte
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
,.fonte
Usar
!
é obviamente a resposta correta, mas se você estiver alternando com frequência, algo como screen ou tmux também poderá ser útil.fonte
Eu tenho isso no meu .vimrc. Encontrado no Stack Overflow há um tempo:
fonte
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.
fonte