Como redireciono a saída do comando para o vim no bash?

87

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?

faizal
fonte

Respostas:

140

Você pode usar a substituição de processo (isso também funciona com aplicativos que não conseguem ler STDIN):

vim <(ls -la)

Ou use vima função de para ler STDIN:

ls -la | vim -
caos
fonte
2
<(ls -la)é na verdade substituição de processo em vez de substituição de comando .
Eliah Kagan 02/09/2014
1
Eu realmente gosto da opção do vim, que permite pesquisar, encontrar e salvar a saída facilmente de despejos de dados.
Josue Alexander Ibarra
38

Você é realmente próximo por conta própria. Você estava perdendo apenas um personagem.

ls -la | vim -
Cris Holdorph
fonte
10
Bem, tecnicamente, são dois personagens. ;)
Cory Klein
19

Aqui está outra abordagem, espero ensinar alguém a algo novo.

Se você sabe que o comando :r !ls -lafunciona 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:

vim -c ':r! ls -la'

Isso é o equivalente a abrir vime executar o comando :r! ls -la. Isso deve funcionar com qualquer vimcomando, onde o comando vem após a -copção.

Alaa Ali
fonte
12

Você pode dizer ao vim para abrir o stdin:

ls -la | vim -
duvidoso
fonte
1

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

ls -la > outputfile.txt
Jake Stewart
fonte
1

setlocal buftype=nofile

Esta é uma boa opção se você deseja criar um alias para substituir less:

seq 100 | vim +':setlocal buftype=nofile' -

Agora você não precisa digitar o! para sair.

Outra opção é:

seq 100 | vim +'nnoremap q :quit!' -

então você pode sair com apenas q<enter>.

Ciro Santilli adicionou uma nova foto
fonte
Boa ideia. Definitivamente mais curto do que digitar por tanto tempo! :)
kode