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 -
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?
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 -
Você está muito perto de você mesmo. Você estava perdendo apenas um personagem.
ls -la | vim -
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
.
Você pode dizer ao vim para abrir o stdin:
ls -la | vim -
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
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>
.