Pipingowanie do mniej i edycja: błąd „nie można edytować standardowego wejścia”. Obejścia?

9

Niedawno dowiedziałem się, że jeśli stronicuję swoje pliki less, mogę nacisnąć vi otworzyć bufor w Emacsie. Działa to tak długo, jak długo mam $EDITORpoprawnie skonfigurowaną zmienną środowiskową , która w moim przypadku ma ją jako:

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

Powyższe daje mi możliwość ładowania emacsa w działającym terminalu less.

Jednak powyższa sztuczka nie działa podczas przesyłania poleceń do less. Robiąc to, lessskarży się na następujący komunikat:

Cannot edit standard input (press RETURN)

Moje pytanie brzmi: dlaczego tak się dzieje? Ale co najważniejsze, czy istnieje jakieś obejście tego problemu ?

Amelio Vazquez-Reina
źródło
2
Powinieneś nauczyć się korzystać z emacsclient , który pozwoli ci edytować pliki w już działającej kopii Emacsa. Emacs nie jest najszybszym edytorem.
cjm
Dlaczego wycofałeś moją edycję? Czy tytuł nie powinien być pytaniem?
John
1
Przepraszam, John, nie widziałem Twojej edycji. Zredagowałem tytuł, aby wyjaśnić, że najbardziej interesują mnie obejścia tego problemu. Myślę, że tytuł jest taki: Piping into less and editing: “cannot edit standard input” error. Workarounds?jest jasny. Dlaczego myślicie inaczej?
Amelio Vazquez-Reina
To zrozumiałe. Chociaż zakładam, że jeśli pytasz, dlaczego wystąpił błąd, powinno być oczywiste, że chcesz obejść to obejście.
John
Zgadzam się, choć jak dotąd najbardziej głosowana odpowiedź dotyczy whyjedynego, a nie jedynego workarounds, więc podkreśliłem.
Amelio Vazquez-Reina,

Odpowiedzi:

5

Jak już powiedziano, nie można edytować strumienia wejściowego.

Obejście jest dość oczywiste: zapisz strumień do pliku od wewnątrz lessi otwórz zapisany plik . Aby to zrobić podczas przeglądania, naciśnij si podaj nazwę pliku. Następnie wyjdź lessi otwórz plik ręcznie lub, nadal od wewnątrz less, wpisz :ei podaj nazwę właśnie zapisanego pliku.

rozcietrzewiacz
źródło
15

Dobrym rozwiązaniem jest przesłanie danych wyjściowych z less do edytora, np. Po „echo foo | less” możesz:

g|$vim -

gprzeskoczy do pierwszego wiersza pliku / danych wejściowych, |wywoła akcję „potok”, $jest znakiem („koniec”), a po nim polecenie do potoku zakresu ( vim -w tym przypadku, gdy „-” oznacza odczytać wejście ze standardowego wejścia).

niebieskawy
źródło
1
Wielkie dzieki!
Simon Pickup
5

Oznacza to dokładnie to, co powiedział - możesz edytować tylko plik znajdujący się na dysku w ten sposób (z less). Jeśli rurami wyjście procesu, jego STDOUTdzieje się STDINna less; nie ma pliku do edycji.

Aaron D. Marasco
źródło