Jak przewijać w górę w oknie terminala, gdy nowe dane wejściowe są generowane bez zrzucania z powrotem na dół (Linux)

37

W Ubuntu chcę przewijać w górę, gdy polecenie jest uruchomione w oknie terminala i generuje nowe dane wyjściowe (w rzeczywistości uruchomione polecenie to rspec). Mogę przewijać w górę, ale za każdym razem, gdy rspec generuje nowy wiersz wyjścia konsoli, zrzuca mnie z powrotem na dół. Czy istnieje sposób przewijania w górę? Używam terminatora na Linux Mint / Ubuntu 12.04 LTS

AKTUALIZACJA

Znalazłem możliwe obejście strony głównej Terminatora mówi, że z

stty ixon

możesz włączyć „Sterowanie przepływem XON / XOFF dla wyjścia końcowego. Będąc w stanie wstrzymać wyjście, wpisując ^ S i wznowić je, naciskając ^ Q [...]”

Nie było to jednak całkowicie to, czego chciałem, bez konieczności wstrzymywania wyjścia (i być może zastanawiania się, kiedy zapomnisz włączyć go ponownie). Pomyślałem, że może istnieć prosty klawisz modyfikujący, taki jak shft-alt z przewijaniem kółka myszy. Dowolny lepsze rozwiązania?

Yo Ludke
źródło
To jedna rzecz, którą bardzo lubię w LXTerminal (LXDE).
Matthew Lundberg
Czy przewijasz za pomocą Shift-PgUp lub paska przewijania?
ott--
@MatthewLundberg Zwykle z kółkiem myszy, więc pasek przewijania. Ale to też nie działa z shift-pgup :( Czy mogę mieć także terminale wewnątrz terminatora, wiesz?
Yo Ludke
1
xfce4-terminalma opcję o nazwie Przewiń na wyjściu , którą możesz odznaczyć i robi to, o co prosiłeś.
Martín Canaval
1
Aby obejść ten problem, możesz wysłać dane wyjściowe do pliku, otworzyć inny terminal i tail -f file.txtzobaczyć, jak jest generowany. Dzięki temu Twój pierwszy terminal będzie mógł przewijać wstecz i nadal będziesz mógł oglądać dane wyjściowe w czasie rzeczywistym. Nie elegancki, wiem.
terdon

Odpowiedzi:

53

Chociaż jestem trochę spóźniony, zamieszczam to tutaj, aby każdy, kto tu przyjdzie, znalazł rozwiązanie. Dla mnie rozwiązaniem tego samego problemu było:

Preferencje terminatora -> karta Profile -> karta Przewijanie [sub] -> Odznacz opcję „Przewiń przy wyjściu”.

Zaletą tej opcji jest to, że nadal będzie przewijać dane wyjściowe, gdy znajdziesz się na samym dole danych wyjściowych, ale gdy tylko przewiniesz w górę, zatrzyma się i nie będzie Ci przeszkadzać, nawet jeśli zawartość wyjściowa nadal jest wyświetlana wygenerowane.

mam nadzieję, że to pomoże

Chikitulfo
źródło
fajnie :) Czy można utworzyć skrót do przełączania tej opcji?
Yo Ludke,
1
Trochę szukałem, ale nie znalazłem sposobu na przełączenie go skrótem w terminatorze. Ponieważ jednak opcja jest zapisana w pliku konfiguracyjnym terminatora w „$ HOME / .config / terminator / config”, powinno być możliwe przypisanie skrótu globalnego do polecenia, które włącza i wyłącza opcję bezpośrednio w pliku konfiguracyjnym.
Chikitulfo,
4
Jednak wprowadzenie tej zmiany w pliku konfiguracyjnym nie wpłynie na już działające instancje terminatora, ale wpłynie tylko na nowe instancje terminatora uruchomione po edycji. Jeśli więc chcesz przełączyć go na działający terminator, musisz to zrobić ręcznie, afaik. W każdym razie, z opcją przełączoną na false, po przewinięciu w dół do ostatniego wiersza, kontynuuje automatyczne przewijanie na wyjściu. Zatrzymuje automatyczne przewijanie tylko po ręcznym przewinięciu w górę. Więc nie widzę żadnej realnej potrzeby włączania i wyłączania opcji.
Chikitulfo
1

tail -f log.txt | lesszaktualizuje się, aby przejść do nowych informacji, a następnie możesz przejść w górę lub w dół. Możesz także użyć lessfunkcji wyszukiwania i tak dalej. Metodą potokową można także analizować ruchome dane wyjściowe.

I ten sam pomysł, ale bez rury: less +F log.txt.
(Zakłada się, że możesz pracować z treściami w ten sposób.)

Stary uniksowy sposób polegał na wciśnięciu Ctrl-S w twoim terminalu, aby zatrzymać, a Ctrl-Q, aby ponownie rozpocząć przewijanie danych wyjściowych - to jest po prostu to, co pozwala terminator stty ixon.
Po dodaniu pasków przewijania wydaje mi się to całkiem przyzwoite - naciśnij Control-S, przewiń w górę do tego, co chcesz, a następnie Control-Q, aby wrócić. Tak, czasami zapomnisz cofnąć wyjście.

Ponieważ jestem wyjątkowo leniwy i ponieważ lubię elastyczność przekierowywania danych wyjściowych, używałbym tail -f z potokiem (zakładając, że pasuje to do przypadku). Potem mogę go zatrzymać, strzałkę w górę i dodać coś w stylu grepa, a on nadal działa: tail -f tac_plus.log | less | egrep 'peerip'

Rzuć trochę cats, a teebędziesz mieć prawdziwą imprezę.

Belacqua
źródło
Chciałem użyć tego do specyfikacji rspec - Problem polega na tym, że przy podejściu tail / less kolory tracą się (wynik jest czarno-biały zamiast zielonego / czerwonego, jeśli uruchomię polecenie bezpośrednio)
Yo Ludke
@YoLudke Nie znam rspec ani jego kolorowania. Istnieją sposoby na przekazywanie kolorów przez grep itp., Ale to może nie działać tutaj. Czy robisz coś takiego, jak uruchamianie wskazującego rspec na proces trwały / zapętlający / długotrwały i uzyskiwanie z tego wyników?
belacqua