Piping in less e modifica: errore "impossibile modificare l'input standard". Soluzioni alternative?


9

Di recente ho appreso che se sfoglio i miei file less, posso premere ve aprire il buffer in Emacs. Funziona finché ho $EDITORimpostato correttamente la variabile d'ambiente , che nel mio caso la ho come:

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

Quanto sopra mi dà la possibilità di caricare emacs all'interno del terminale che esegue less.

Tuttavia, il trucco sopra non funziona quando si eseguono i comandi di pipingless . Nel fare ciò, si lesslamenta del seguente messaggio:

Cannot edit standard input (press RETURN)

La mia domanda è: perché succede? Ma soprattutto, c'è qualche soluzione alternativa ad esso ?


2
Dovresti imparare come usare emacsclient , che ti permetterà di modificare i file in una copia già in esecuzione di Emacs. Emacs non è l'editor con l'avvio più rapido.
cjm,

Perché hai eseguito il rollback della mia modifica? Il titolo non dovrebbe essere una domanda?
Giovanni,

1
Scusa @ John, non ho visto la tua modifica. Ho modificato il titolo per chiarire che sono principalmente interessato a soluzioni alternative a questo problema. Penso che il titolo così com'è: Piping into less and editing: “cannot edit standard input” error. Workarounds?è chiaro. Perché la pensi diversamente?
Amelio Vazquez-Reina,

Questo è comprensibile. Anche se suppongo che se ti stai chiedendo perché hai ricevuto l'errore, dovrebbe essere ovvio che vorresti una soluzione alternativa.
Giovanni,

Sono d'accordo, anche se la risposta più votata finora riguarda l' whyunica e non la workarounds, quindi ho aggiunto l'enfasi.
Amelio Vazquez-Reina,

Risposte:


5

Come già detto, non è possibile modificare un flusso di input.

La soluzione è abbastanza ovvia: salvare lo stream in un file dall'interno lesse aprire il file salvato . Per farlo durante la visualizzazione, premere se assegnare un nome a un file. Quindi esci lesse apri il file manualmente oppure, sempre dall'interno less, digita :ee dai il nome del file che hai appena salvato.


15

Una buona soluzione consiste nel convogliare l'output da less al tuo editor, ad esempio dopo "echo foo | less" puoi fare:

g|$vim -

gsalterà alla prima riga del file / input, |invocherà l'azione "pipe", $è il segno ("end"), seguito dal comando per reindirizzare l'intervallo in ( vim -in questo caso, dove "-" significa per leggere l'input da stdin).


1
Fantastico, grazie!
Simon Pickup,

5

Significa esattamente quello che ha detto: puoi solo modificare un file che si trova sul disco in questo modo (da less). Se hai convogliato l'output di un processo, STDOUTsta andando STDINper less; non ci sono file da modificare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.