Piping em menos e edição: erro “não é possível editar entrada padrão”. Soluções alternativas?

8

Recentemente, soube que, se eu paginar meus arquivos com less , posso pressionar v e abrir o buffer no Emacs. Isso funciona contanto que eu tenha a variável de ambiente $EDITOR configurada corretamente, que no meu caso eu tenho como:

export EDITOR='env TERM=xterm-256color emacs -nw'

O acima me dá a capacidade de carregar o emacs dentro do terminal que executa less .

No entanto, o truque acima não funciona quando os comandos piping para less . Ao fazer isso, less reclama com a seguinte mensagem:

Cannot edit standard input (press RETURN)

Minha pergunta é: por que isso acontece? Mas o mais importante, existe alguma solução para isso ?

    
por Amelio Vazquez-Reina 25.10.2011 / 23:49

3 respostas

5

Como já foi dito, você não pode editar um fluxo de entrada.

A solução alternativa é óbvia: salve o fluxo em um arquivo de less e abra o arquivo salvo . Para fazer isso durante a exibição, pressione s e forneça o nome de um arquivo. Em seguida, saia do less e abra o arquivo manualmente ou, ainda de dentro de less , digite :e e forneça o nome do arquivo que acabou de salvar.

    
por 26.10.2011 / 16:15
9

Uma boa solução é canalizar a saída de menos para o editor, por exemplo depois de "echo foo | less" você pode fazer:

g|$vim -

g saltará para a primeira linha do arquivo / entrada, | invocará a ação "pipe", $ é a marca ("o fim"), seguido pelo comando para canalizar o intervalo em ( vim - neste caso, onde o "-" significa ler a entrada do stdin).

    
por 19.07.2012 / 12:09
5

Significa exatamente o que foi dito - você só pode editar um arquivo que esteja no disco dessa maneira (de less ). Se você canalizou a saída de um processo, seu STDOUT está indo para STDIN para less ; não há arquivo para editar.

    
por 26.10.2011 / 03:36

Tags