Wie ersetze ich vim screen buffer durch die vorherige Bash-Aktivität nach dem Beenden?

14

Ich versuche herauszufinden, was eine Bash- (oder Vim-) Funktion ist. Hier ist das Szenario. Ich bin in einem Bash-Terminal, bearbeite etwas mit vim und gehe dann zurück zu bash. In einigen Terminals verschwindet der vim-Sitzungsbildschirm, um die vorherige Bash-Shell-Aktivität anzuzeigen (dies ist, was ich will?).

In anderen Fällen bleibt der Bildschirmpuffer der vim-Sitzung erhalten (versteckt die Aktivität der alten Bash-Shell). Ich muss entweder den Bildschirm löschen oder warten, bis meine Bash-Aktivität den vim-Sitzungspuffer aus dem Bildschirm verdrängt.

Wie kann ich dieses Verhalten steuern, um den vim-Sitzungspuffer durch vorherige Bash-Aktivitäten zu ersetzen?

Vielen Dank, Tim

Gemeinschaft
quelle
superuser.com/questions/871170 ist verwandt.
JdeBP

Antworten:

10

Vim sendet t_tiund t_ksan das Terminal, wenn eine Sitzung gestartet wird t_teund t_kewenn sie endet. Die Sequenzen t_tiund t_tebewirken, dass das Terminal zu seinem alternativen Bildschirm wechselt.

In Ihrer ~/.vimrcDatei können Sie vimdas Dokument beim Beenden auf dem Bildschirm belassen, indem Sie die folgende Zeile einfügen:

set t_ti=""

Wenn Sie eine ähnliche Zeile haben, sollte das Entfernen die vorherigen Terminalinhalte beim Beenden anzeigen vim.

Bis auf weiteres angehalten.
quelle
4

Eine Ursache für dieses Problem kann die Verwendung des Programms sein screen. Ich finde, wenn ich in einer screenSitzung bin, kann vim den Terminalstatus nicht zurückgeben.

Ich bin mir nicht sicher, ob es spezifisch für den Bildschirm oder die Bildschirm / Vim-Kombination in Ubuntu 15.10 ist. Dieselbe Ursache wie oben beschrieben, ich denke, screenhat unterschiedliche TermCap.

teknopaul
quelle
2
Durch Hinzufügen altscreen onzu ~ / .screenrc wird das Problem für den Bildschirm behoben.
BartBiczBoży
3

Fügen Sie Ihrer ~/.bash_profileDatei einfach eine Zeile hinzu, um TERM bei jeder Anmeldung als xterm zu exportieren. Gehen Sie wie folgt vor:

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

Wenn Sie sich das nächste Mal anmelden, ist Ihr Problem behoben. Wenn Sie sich nicht erneut anmelden möchten, haben Sie folgende Möglichkeiten:

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
ekerner
quelle
1
würde das nicht sein export $TERM?
Chrsblck
1
@chrsblck: Nein, da exportder Name (z. B. TERMin diesem Fall) als Umgebungsvariable und nicht als lokale Variable exportiert wird. Wenn Sie export $TERMin diesem Beispiel verwenden, wird die $TERMVariable aufgelöst, sodass xtermSie die Umgebungsvariable festlegen $xterm, die wahrscheinlich nicht definiert ist. Gute Frage, es sieht auch für mich immer falsch aus.
ekerner
2

Tim. Beide obigen Antworten sind richtig. Vim schaltet das Terminal auf einen "alternativen Bildschirm" um, wenn die entsprechende Funktion im Eintrag termcap für $ TERM definiert ist.

Sie sagen "in einigen Terminals (... es funktioniert richtig ...)" und "in anderen (... es funktioniert falsch ...)"

Führen Sie für alle diese Terminals denselben Terminalemulator aus?

Zum Beispiel habe ich auf meiner Heim-Linux-Box Gnome-Terminal, xterm, Konsole, yakuake und wahrscheinlich ein paar mehr, die ich vergessen habe, zusammen mit den "virtuellen Terminals", die mit Strg-Alt-F1 verbunden sind ... Strg-Alt-F6 oder so. Die meisten davon können mit dem "Standard" -Termcap-Eintrag für "xterm" arbeiten - mit Ausnahme der virtuellen Terminals, die eine Terminaldefinition mit dem Namen "linux" haben.

Überprüfen Sie den Terminalemulator selbst und den Wert von $ TERM auf funktionierenden und auf nicht funktionierenden Terminals, um festzustellen, was sich unterscheidet. Auch wenn Sie manchmal als ein anderer Benutzer angemeldet sind, kann dies der Kern des Problems sein - da jeder Benutzer seine eigene .bashrc-Datei hat, können verschiedene Einstellungen von Benutzer zu Benutzer unterschiedlich sein.

Ich hoffe, das hilft!
-pbr

pbr
quelle
1

Dies hängt mit Ihrem Terminal und den Einstellungen Ihres Geräts zusammen, die sich mit den Terminalinformationen befassen. Eine tragbare Lösung ist die Verwendung von GNU Screen. Öffnen Sie ein Fenster für Vim und ein anderes für Bash, um die beiden Sitzungen zu trennen. Wenn Sie ein grafisches Terminal wie xterm unter X11, Gnome Terminal unter Gnome oder Terminal.app unter OS X verwenden, können Sie ein neues Fenster oder eine neue Registerkarte öffnen, um denselben Effekt zu erzielen.

Wilhelmtell
quelle