2013-07-25 15 views
15

Kiedy pracuję w terminalu, widzę historię ostatniego wyniku wykonania poleceń powłoki. Jeśli uruchomię vim, widzę plik, który otwieram na pełnym ekranie. Kiedy wychodzę z vima, ponownie widzę historię ostatnich poleceń powłoki.: jak włączyć alternatywny ekran?

Jednak, gdy używam vim z ekranu. Widzę footprint pliku, który właśnie edytowałem przy wyjściu z vima zamiast historii ostatnich poleceń powłoki. Chciałbym jednak zobaczyć historię powłoki.

Jak mogę osiągnąć to zachowanie?

użyłem:

  • terminal.app i iterm2.app
  • próbował włączeniu do xterm xterm-256color (w iterm2.app)
  • kontroli i odznaczenie „Zapisz linie do przewijania, gdy pasek stanu aplikacji jest obecny "i" Zapisz linie do przewijania w alternatywnym trybie ekranu "(w iterm2)
  • dodanie termcapinfo xterm ti @: te @ do .screenrc (chociaż powinno to być rozwiązanie przeciwnego problemu, ale dlaczego nie próbować)
  • sshing do maszyn linuxowych i próbujących użyć ekranu gnu tam

Do tej pory nie uzyskałem pożądanego zachowania.

P.S.

google trochę i zobaczyłem komentarze ludzi, którzy próbują rozwiązać odwrotny problem:

Many of you probably know the annoying behaviour of console-based programs like less or vi restoring the screen after exiting so that the text you just had there vanishes.

Ideą tego zachowania jest to, czy programy wykorzystują alternatywny ekran, aby zapisać obraz historii powłoki i pokaż, kiedy vim się kończy. Tak więc jeśli ktoś chce rozwiązać odwrotny problem, powinien

exorce the evil alternate screen

Odpowiedz

18

UPDATE: zapomniałem o cechę screen który uniemożliwia alternatywną obsługę ekranu domyślnie.

Dodaj altscreen on do swojego $HOME/.screenrc, aby go włączyć. To prawdopodobnie wszystko, co musisz zrobić; wszystkie kłopoty z $TERM, $TERMCAP i $TERMINFO jest prawdopodobnie niepotrzebne. Pozostawiam resztę odpowiedzi tutaj.

Miałem to na własne .screenrc tak długo, że poślizgnął się mój umysł.

Aby włączyć tę funkcję dla bieżącej sesji, wpisz screen znak escape (cntrl-A domyślnie), a następnie :altscreen onWprowadź.

Bez tego, screen nie zareaguje na sekwencje specjalne, nawet jeśli są zdefiniowane w terminfo lub termcap.


vim (i less, a większość innych curses oparte programy pełnoekranowe) używać smcup i rmcup ciągi określone przez terminfo dla terminalu. (Są one nazywane odpowiednio ti i te w starszym systemie termcap). smcup przełącza się na alternatywny ekran, a rmcup przełącza z powrotem na ekran główny.

Jeśli twój wpis terminfo nie ma tych napisów, programy nie będą w stanie tego zrobić.

Polecenie ekranu domyślnie ustawia twój $TERM na "screen". Wygląda na to, że wpis terminfo "screen" nie ma smcup i rmcup.

Jeśli masz ochotę na hakowanie wpisów terminfo, możesz zmodyfikować istniejące informacje na "ekranie", aby dodać smcup i rmcup. Będziesz potrzebował polecenia infocmp, aby przekształcić terminfo na tekst, a tic, aby przekształcić go z powrotem do postaci binarnej używanej przez terminfo.

Prostszym rozwiązaniem jest ustawienie zmiennej środowiskowej $TERM na inną niż przed wywołaniem polecenia screen. Prawie wszystkie emulatory terminali są oparte na starym DEC VT100, więc powinny być wystarczająco kompatybilne.

Na moim systemie, na przykład, po zalogowaniu mam TERM=xterm; to prawdopodobnie coś innego na MacOS. W ramach sesji screen domyślnie Musiałbym:

$ echo $TERM 
screen 

mogę go zmienić na xterm tak:

$ export TERM=xterm 

(Ponownie, zastąpić "xterm" przez cokolwiek $TERM jest w systemie .)

można również dodać

term xterm 

do Twojego $HOME/.screenrc. W rzeczywistości screen ma wiele opcji do poprawiania ustawień termcap/terminfo; man screen i wyszukaj "terminfo", aby poznać szczegóły.

+0

Dzięki! 'altscreen on' w' $ HOME/.screenrc' i 'Ctl + A' ->': altscreen on' jest tym, co zadziałało dla mnie. – chown