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 ?

Amelio Vazquez-Reina
fuente
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.

rozcietrzewiacz
fuente
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).

azulado
fuente
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.

Aaron D. Marasco
fuente