Tuyauterie en moins et modification: erreur «impossible de modifier l'entrée standard». Solutions de contournement?

9

J'ai récemment appris que si je page mes fichiers avec less, je peux appuyer sur vet ouvrir le tampon dans Emacs. Cela fonctionne tant que j'ai la variable d'environnement $EDITORcorrectement configurée, ce qui dans mon cas, je l'ai comme:

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

Ce qui précède me donne la possibilité de charger emacs dans le terminal qui fonctionne less.

Cependant, l'astuce ci-dessus ne fonctionne pas lors de la canalisation des commandes vers less. Ce faisant, se lessplaint du message suivant:

Cannot edit standard input (press RETURN)

Ma question est, pourquoi cela se produit-il? Mais surtout, y a-t-il une solution de contournement ?

Amelio Vazquez-Reina
la source
2
Vous devriez apprendre à utiliser emacsclient , qui vous permettra de modifier des fichiers dans une copie déjà en cours d'exécution d'Emacs. Emacs n'est pas l'éditeur qui démarre le plus rapidement.
cjm
Pourquoi avez-vous annulé ma modification? Le titre n'est-il pas censé être une question?
John
1
Désolé @John, je n'ai pas vu votre modification. J'ai édité le titre pour clarifier que je suis surtout intéressé par des solutions à ce problème. Je pense que le titre tel qu'il est: Piping into less and editing: “cannot edit standard input” error. Workarounds?est clair. Pourquoi pensez-vous autrement?
Amelio Vazquez-Reina,
C'est compréhensible. Bien que je suppose que si vous demandez pourquoi vous avez obtenu l'erreur, il devrait être évident que vous souhaitez une solution de contournement.
John
Je suis d'accord, bien que la réponse la plus votée jusqu'à présent traite de la whyseule et non de la workarounds, j'ai donc mis l'accent.
Amelio Vazquez-Reina,

Réponses:

5

Comme cela a déjà été dit, vous ne pouvez pas modifier un flux d'entrée.

La solution de contournement est assez évidente: enregistrez le flux dans un fichier de l'intérieur lesset ouvrez le fichier enregistré . Pour ce faire pendant la visualisation, appuyez sur set donnez un nom à un fichier. Ensuite, quittez lesset ouvrez le fichier à la main, ou, toujours de l'intérieur less, tapez :eet donnez le nom du fichier que vous venez d'enregistrer.

rozcietrzewiacz
la source
15

Une bonne solution consiste à diriger la sortie de less vers votre éditeur, par exemple après "echo foo | less" vous pouvez faire:

g|$vim -

gsautera à la première ligne du fichier / entrée, |invoquera l'action "pipe", $est la marque ("la fin"), suivie de la commande pour diriger la plage ( vim -dans ce cas, où le "-" signifie pour lire l'entrée de stdin).

bleuté
la source
1
Super merci!
Simon Pickup
5

Cela signifie exactement ce qu'il a dit - vous pouvez uniquement modifier un fichier qui se trouve sur le disque de cette façon (à partir de less). Si vous LPRPDÉ la sortie d'un processus, son STDOUTva dans STDINpour less; il n'y a aucun fichier à éditer.

Aaron D. Marasco
la source