Niedawno dowiedziałem się, że jeśli stronicuję swoje pliki less
, mogę nacisnąć v
i otworzyć bufor w Emacsie. Działa to tak długo, jak długo mam $EDITOR
poprawnie 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, less
skarż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 ?
Piping into less and editing: “cannot edit standard input” error. Workarounds?
jest jasny. Dlaczego myślicie inaczej?why
jedynego, a nie jedynegoworkarounds
, więc podkreśliłem.Odpowiedzi:
Jak już powiedziano, nie można edytować strumienia wejściowego.
Obejście jest dość oczywiste: zapisz strumień do pliku od wewnątrz
less
i otwórz zapisany plik . Aby to zrobić podczas przeglądania, naciśnijs
i podaj nazwę pliku. Następnie wyjdźless
i otwórz plik ręcznie lub, nadal od wewnątrzless
, wpisz:e
i podaj nazwę właśnie zapisanego pliku.źródło
Dobrym rozwiązaniem jest przesłanie danych wyjściowych z less do edytora, np. Po „echo foo | less” możesz:
g
przeskoczy 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).źródło
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, jegoSTDOUT
dzieje sięSTDIN
naless
; nie ma pliku do edycji.źródło