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

63

Estou tentando redirecionar a saída de um comando bash para um novo arquivo.

Se eu tentar o pipe como abaixo:

ls -la | vim

O Bash mostra-me os erros:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Eu sei que posso abrir o Vim e usar:

:r !ls -la

Mas existe uma maneira de fazer isso no bash, para que o Vim seja aberto e a saída seja colada automaticamente?

    
por faizal 13.08.2014 / 18:13

6 respostas

100

Você pode usar substituição de processos (isso também funciona com aplicativos que não podem leia de STDIN ):

vim <(ls -la)

Ou use a função vim para ler STDIN :

ls -la | vim -
    
por chaos 13.08.2014 / 18:58
28

Você está muito perto de você mesmo. Você estava perdendo apenas um personagem.

ls -la | vim -
    
por Cris Holdorph 13.08.2014 / 18:18
15

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

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 ele for aberto, direto do bash:

vim -c ':r! ls -la'

Isso equivale a abrir vim e executar o comando :r! ls -la . Isso deve funcionar com qualquer comando vim , em que o comando vem depois da opção -c .

    
por Alaa Ali 13.08.2014 / 19:11
11

Você pode dizer ao vim para abrir o stdin:

ls -la | vim -
    
por iffy 13.08.2014 / 18:20
1

Se o seu objetivo for simplesmente obter o resultado em um arquivo de texto, não será necessário invocar o vim. Bash pode fazer isso sozinho com

ls -la > outputfile.txt
    
por Jake Stewart 24.03.2017 / 16:44
0

setlocal buftype=nofile é uma boa opção se você for 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!' -

para que você possa sair com apenas q<enter> .

    

Tags