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?

Respostas:



38

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

ls -la | vim -

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.


12

Você pode dizer ao vim para abrir o stdin:

ls -la | vim -

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

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>.


Boa ideia. Definitivamente mais curto do que digitar por tanto tempo! :)
kode
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.