Gostaria de gravar o buffer inteiro na saída padrão ( /dev/stdout
) em vez do arquivo e o seguinte comando funciona conforme o esperado durante a edição do arquivo:
:w >> /dev/stdout
Dica: pressione Control+ Lpara atualizar a tela.
Mas não funciona como esperado quando estou tentando fazer o mesmo na linha de comando ( não interativamente ), por exemplo:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
O mesmo acontece com :w !tee
, :x! /dev/stdout
, :%print
e semelhantes.
Antes de sair, ele está dizendo: [Device] 1L, 17C appended
.
Existe alguma maneira de forçar o vim a gravar a entrada padrão na saída padrão no meio de um tubo? Talvez seja de alguma forma armazenado em buffer?
command-line
invocation
unix
ex-mode
kenorb
fonte
fonte
vim
a análise de arquivos em vez desed
(por exemplo, alterações complexas repetidas em massa em vários arquivos grandes). O exemplo não faz nada para mantê-lo simples e não tornar possível a duplicação de outra postagem .Respostas:
Para imprimir buffer para shell de saída padrão, é
vim
necessário iniciar no modo Ex, caso contrário, ele abrirá o modo "normal" com sua própria janela e limpará os buffers de saída ao sair.Aqui está o exemplo de trabalho mais simples:
ou ainda mais curto:
Nota: O comando
vim -e
é basicamente equivalente aoex
comando.É necessário especificar um descritor de arquivo especial para a entrada padrão (
/dev/stdin
) para evitar mensagens irritantes extras (como explicado abaixo).E aqui estão alguns exemplos com análise de strings:
Nota: O último exemplo mostra uma mensagem irritante extra que não é possível ocultá-la, é porque uma estratégia padrão de ler todo o arquivo na memória e dizer que foi lido a partir da entrada padrão. O primeiro exemplo funciona sem a mensagem, porque o arquivo produz dados infinitos sem um sinal de fim de arquivo ( EOF ), portanto nunca chegará ao final da leitura de entrada.
Relacionado:
fonte
+q!
e não+:q!
, certo?vipe
é uma ferramenta conveniente para editar pipelines, parte domoreutils
pacote. É um invólucro para editores (incluindo ovi
que lhe dá nome). Ele usa aEDITOR
variável de ambiente para definir o editor, por isso, como com outras ferramentas que fazem uso deEDITOR
(tais comocrontab
,visudo
, etc.), você pode ações de script usando essa variável. Por exemplo, você pode alterá-lo para:Obviamente, ações complicadas podem passar a citar o inferno, para que você possa escrever um script:
E use
EDITOR="sh /path/to/script"
.fonte