Estou usando grep -e Peugeot -e PeuGeot carlist.txt
para pesquisar no carlist.txt e retirar alguns itens e presumi que isso grep -e Peugeot -e PeuGeot carlist.txt | vi
seria útil para mim, mas é isso que recebo:
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
:read !grep -e Peugeot -e PeuGeot carlist.txt
.:read !cmd...
vai incluir a saída de cmd ... no arquivo (no local do cursor)grep ... > /tmp/foo
. Você pode adicionar&& vi /tmp/foo
no final se desejar editar esse arquivo imediatamente.vi
opera em arquivos de texto arbitrários; os arquivos em si não estão diretamente associadosvi
. (Ou, como eu aprendi,vi -
fará com quevi
a operar no conteúdo destdin
;vim
faz isso, mas nem todas as versões devi
do.)Respostas:
A execução do vi ou vim com '-' como argumento faz com que ele leia o arquivo para editar a partir da entrada padrão. Conseqüentemente:
fará o que você precisa.
fonte
stdin
. Em alguns casos, você terá que redirecionar destderr
parastdin
, por exemplo:valgrind my_file.out 2>&1 | vi -
grep
as cores de pesquisa (compostas por caracteres não imprimíveis) dentro do Vim? Você sempre pode fazer uma pesquisa no Vim.Você deve usar o redirecionamento de saída :
Além disso, acho que você
grep
pode melhorar:fonte
Além disso
vim -
, você também pode usar a substituição de processo usando a<(command)
sintaxe, por exemplo:Veja também:
fonte
O redirecionamento de saída também pode ser usado assim:
Até várias saídas de comando podem ser redirecionadas, como se fossem salvas em arquivos separados:
fonte
Em
~/bin/r
:em
~/.vimrc
:Então:
e eu tenho
no meu
~/.bashrc,
modofonte
Existem muitas maneiras eficazes de fazer o que você deseja, dentro de vi (m) ou fora de vi (m).
Execute seu comando, produza um arquivo (temporário) e edite o arquivo ( consulte a resposta de Joseph R. )
Execute seu comando (em segundo plano) para produzir um arquivo temporário e edite o arquivo usando ": e!" para atualizar seu arquivo conforme ele é produzido (isso é útil para arquivos de log e outros arquivos sendo produzidos por outro processo, por exemplo, cron?),
Execute vi (m) e execute um processo filho para criar o arquivo temporário e, em seguida, leia-o,
Ou simplesmente mude para o arquivo,
Execute vi (m) e use o double-bang "!!" para que o vi execute o comando filho, pegando os resultados e inserindo-os no local atual (sobrescreve a linha atual, verifique se você tem uma linha em branco),
E agora você pode gravar o arquivo (se quiser) em qualquer nome de arquivo,
E a resposta de Petr Uzel também é boa,
Que lê de stdin
fonte