Estou tentando redirecionar a saída de um comando bash para um novo arquivo.
Se eu tentar o tubo como abaixo:
ls -la | vim
Bash me mostra os erros:
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
Eu sei que posso abrir o Vim e depois usar:
:r !ls -la
Mas existe uma maneira de fazer isso no próprio bash, para que o Vim seja aberto e a saída seja colada lá automaticamente?
<(ls -la)
é na verdade substituição de processo em vez de substituição de comando .Você é realmente próximo por conta própria. Você estava perdendo apenas um personagem.
fonte
Aqui está outra abordagem, espero ensinar alguém a algo novo.
Se você sabe que o comando
:r !ls -la
funciona dentro do vim, você pode fazer o seguinte para abrir o vim e fazê-lo executar o comando assim que for aberto, diretamente do bash:Isso é o equivalente a abrir
vim
e executar o comando:r! ls -la
. Isso deve funcionar com qualquervim
comando, onde o comando vem após a-c
opção.fonte
Você pode dizer ao vim para abrir o stdin:
fonte
Se seu objetivo é simplesmente obter a saída em um arquivo de texto, não é necessário invocar o vim. Bash pode fazer isso sozinho com
fonte
setlocal buftype=nofile
Esta é uma boa opção se você deseja criar um alias para substituir
less
:Agora você não precisa digitar o! para sair.
Outra opção é:
então você pode sair com apenas
q<enter>
.fonte