Tubería en menos y edición: error "no se puede editar la entrada estándar". Soluciones alternativas?


9

Recientemente aprendí que si busco en mis archivos less, puedo presionar vy abrir el búfer en Emacs. Esto funciona siempre que tenga la variable de entorno $EDITORconfigurada correctamente, que en mi caso la tengo como:

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

Lo anterior me da la capacidad de cargar emacs dentro del terminal que se ejecuta less.

Sin embargo, el truco anterior no funciona cuando se canalizan comandos a less. Al hacer esto, se lessqueja con el siguiente mensaje:

Cannot edit standard input (press RETURN)

Mi pregunta es, ¿por qué sucede esto? Pero lo más importante, ¿hay alguna solución ?


2
Debe aprender a usar emacsclient , que le permitirá editar archivos en una copia de Emacs que ya se está ejecutando. Emacs no es el editor de inicio más rápido.
— cjm

¿Por qué revertiste mi edición? ¿No se supone que el título es una pregunta?
— John

1
Lo siento @John, no vi tu edición. Edité el título para aclarar que estoy principalmente interesado en soluciones a este problema. Creo que el título tal como está: Piping into less and editing: “cannot edit standard input” error. Workarounds?está claro. ¿Por qué pensar lo contrario?
— Amelio Vazquez-Reina

Eso es comprensible. Aunque supongo que si está preguntando por qué recibió el error, debería ser obvio que querría una solución alternativa.
— John

Estoy de acuerdo, aunque la respuesta más votada hasta ahora aborda la whyúnica, y no la workarounds, así que agregué el énfasis.
— Amelio Vazquez-Reina

Respuestas:


5

Como ya se dijo, no puede editar una secuencia de entrada.

La solución es bastante obvia: guarde la secuencia en un archivo desde dentro lessy abra el archivo guardado . Para hacerlo mientras ve, presione sy asigne un nombre a un archivo. Luego, salga lessy abra el archivo a mano o, aún desde adentro less, escriba :ey dé el nombre del archivo que acaba de guardar.


15

Una buena solución es canalizar la salida de less a su editor, por ejemplo, después de "echo foo | less" puede hacer:

g|$vim -

gsaltará a la primera línea del archivo / entrada, |invocará la acción "canalizar", $es la marca ("el final"), seguido del comando para canalizar el rango ( vim -en este caso, donde el "-" significa para leer la entrada de stdin).


1
¡Genial gracias!
— Simon Pickup

5

Significa exactamente lo que dijo: solo puede editar un archivo que está en el disco de esta manera (desde less). Si canaliza la salida de un proceso, STDOUTse va a utilizar STDINpara less; No hay archivo para editar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.