Jak zamienić bufor ekranu vima na poprzednią aktywność bash po wyjściu?

14

Próbuję dowiedzieć się, co to jest funkcja bash (lub vim). Oto scenariusz. Jestem w terminalu bash, następnie edytuję coś za pomocą vima, a następnie wracam do bash. W niektórych terminalach ekran sesji vim znika, aby pokazać poprzednią aktywność powłoki bash (to jest to, czego chcę?).

W innych pozostaje bufor ekranu sesji vim (ukrywanie starej aktywności powłoki bash). Będę musiał wyczyścić ekran lub poczekać, aż moja aktywność bash wypchnie bufor sesji vim z ekranu.

Jak mogę kontrolować to zachowanie, aby zastąpić bufor sesji vim poprzednią aktywnością bash?

Dzięki Tim

Społeczność
źródło
superuser.com/questions/871170 jest powiązany.
JdeBP

Odpowiedzi:

10

Vim wysyła t_tii t_ksna terminal, gdy sesja została uruchomiona t_te, a t_kekiedy kończy. Te t_tii t_tesekwencje powodują terminal do przełączania jego alternatywnego ekranu.

W swoim ~/.vimrcpliku możesz vimpozostawić dokument na ekranie po wyjściu, dołączając ten wiersz:

set t_ti=""

jeśli masz linię podobną do tej, usunięcie jej powinno sprawić, że zawartość poprzedniego terminalu pojawi się po wyjściu vim.

Wstrzymano do odwołania.
źródło
4

Przyczyną tego problemu może być używanie programu screen. Uważam, że kiedy jestem w screensesji, vim nie może zwrócić stanu terminala.

Nie jestem pewien, czy jest specyficzny dla screena, czy komendy screen / vim w Ubuntu 15.10. Ta sama przyczyna, jak opisano powyżej, chyba screenma inny termcap.

teknopaul
źródło
2
Dodanie altscreen ondo pliku ~ / .screenrc rozwiązuje problem dotyczący ekranu.
BartBiczBoży
3

Wystarczy dodać wiersz do ~/.bash_profilepliku, aby wyeksportować TERM jako xterm przy każdym logowaniu. Wykonaj następujące czynności;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

Teraz przy następnym logowaniu problem zostanie naprawiony, a jeśli nie chcesz się ponownie logować, możesz wykonać jedną z ...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
ekerner
źródło
1
nie byłoby to export $TERM?
chrsblck
1
@chrsblck: Nie, ponieważ exporteksportuje nazwę (np. TERMw tym przypadku) jako zmienną środowiskową zamiast zmiennej lokalnej. Jeśli użyjesz export $TERMw tym przykładzie, $TERMvar zmieniłoby się na xtermustawione na env var $xterm, który prawdopodobnie nie jest zdefiniowany. Dobre pytanie, ale i dla mnie zawsze wygląda to źle.
ekerner
2

Tim Obie powyższe odpowiedzi są poprawne. Vim przełącza terminal na „ekran alternatywny”, jeśli zdolność do tego jest zdefiniowana we wpisie termcap dla $ TERM.

Mówisz „w niektórych terminalach (... działa dobrze ...)” i „w innych (... działa źle ...)”

Czy używasz dokładnie tego samego emulatora terminali dla wszystkich tych terminali?

Na przykład na moim domowym Linuksie mam gnome-terminal, xterm, Konsole, yakuake i prawdopodobnie kilka innych, o których zapomniałem, wraz z „wirtualnymi terminalami” związanymi z ctrl-alt-F1 ... ctrl-alt-F6 lub tak. Większość z nich może współpracować ze „standardową” pozycją termcap dla „xterm” - z wyjątkiem wirtualnych terminali, które mają definicję terminali o nazwie „linux”.

Sprawdź sam emulator terminala i wartość $ TERM na terminalach, które działają i na tych, które nie działają, aby zobaczyć, co jest inne. Ponadto, jeśli czasami logujesz się jako inny użytkownik, może to być sedno problemu - ponieważ każdy użytkownik ma swój własny plik .bashrc, różne ustawienia mogą się różnić w zależności od użytkownika.

Mam nadzieję, że to pomaga!
-pbr

pbr
źródło
1

Ma to związek z terminalem i ustawieniami urządzenia dotyczącymi informacji o terminalu. Jednym przenośnym rozwiązaniem jest użycie ekranu GNU. Otwórz jedno okno dla Vima, a drugie dla Basha, oddzielając w ten sposób dwie sesje. Jeśli używasz terminala graficznego, takiego jak xterm na X11, Gnome Terminal na Gnome lub Terminal.app na OS X, możesz otworzyć nowe okno lub kartę, aby uzyskać ten sam efekt.

wilhelmtell
źródło