Wie stelle ich die Bash-Anzeige so ein, dass der VIM-Text nach dem Beenden nicht angezeigt wird?

28

Meine Frage ist einfach, aber ich finde es schwierig, sie einfach zu formulieren / zu erklären.

Ich logge mich in mehrere Unix-Boxen mit unterschiedlichen Accounts ein. Ich sehe 2 verschiedene Dinge für user1und user2, während ich Textdateien in vim bearbeite

user1

Wenn ich vim filenametippe, öffnet sich vim und ich bearbeite die Datei. Wenn ich es schließe, ist der gesamte Text aus der Datei verschwunden und ich sehe den Befehl / die Ausgabe der Teminals, der / die zuvor vorhanden war.

user2

Wenn ich vim filenametippe, öffnet sich vim und ich bearbeite die Datei. Wenn ich es schließe, wird der Teil der Datei, der während vimmeines Aufenthalts auf dem Display angezeigt wurde, weiterhin auf dem Display angezeigt, und alle vorherigen Terminal-Anzeigen werden nach oben gescrollt. Selbst wenn die Datei nur eine Zeile lang war, zeigt das Display nach dem Beenden von vim die erste Zeile an, mit allen verbleibenden Zeilen, ~und ich sehe die Eingabeaufforderung am unteren Bildschirmrand.

Einzelheiten

$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
$ vim --version
VIM - Vi IMproved 7.0 (2006 May 7, compiled Jun 12 2009 07:08:36)

Ich habe die vimrcDateien für beide Benutzer verglichen und kenne alle Einstellungen. Es wurden keine Einstellungen / Konfigurationen gefunden, die mit diesem Verhalten zusammenhängen.

Hat dieses Verhalten mit der Shell-Konfiguration zu tun? Wie stelle ich die Dinge ein, damit ich das in user1Szenario gezeigte Verhalten erhalte ?

Ich bin nicht in der Lage, dies einfach zu beschreiben, und finde es auch schwierig, zu googeln, da ich nicht weiß, welches Keyword für ein solches Verhalten zu suchen ist. Lass es mich wissen, wenn ich näher darauf eingehen soll.

mtk
quelle
Befinden sich user1und user2Konten auf demselben oder einem anderen Computer?
Jasonwryan
@jasonwryan Die Anmeldung auf demselben Computer zeigt dasselbe Szenario. @ warl0ck Danke dafür.
MTK
1
Wenn Sie dieses Verhalten erzwingen möchten, aber Ihren Terminaltyp beibehalten möchten, fügen Sie Ihrer .bashrc- oder .profile-Datei eine Zeile mit dem Alias ​​vi = "/ usr / bin / vi $ *; clear" hinzu
Criggie

Antworten:

24

Einer der Gründe für dieses Verhalten ist die Einstellung des Terminals für jeden Benutzer.

Beispielsweise:

  • Benutzer1 verwendet TERM = xterm . In diesem Fall wird beim Beenden von vim das Terminal gelöscht .
  • Benutzer2 verwendet TERM = vt100 . In diesem Fall wird das Terminal beim Beenden von vim nicht gelöscht .

Überprüfen Sie, mit welchem ​​Terminal Benutzer1 arbeitet, echo $TERMund legen Sie dasselbe für Benutzer2 fest. für bash:

TERM = xterm; TERM exportieren

BitsOfNix
quelle
+1 Genaue / perfekte Lösung. Vielen Dank !!! Hätte nicht gedacht, dass es so einfach ist. Können Sie bitte erläutern, was a TERMist? oder auf einen Ressourcenlink zeigen? Ich muss das verstehen. Betrifft dies nur, wenn wir eine Verbindung über herstellen putty?
MTK
Sie können die Terminal-Einstellung in der Putty-Sitzung angeben, aber Benutzer können sie in ihren Umgebungsvariablen angeben lassen. TERM definiert Ihren Terminaltyp und einige bieten mehr Funktionen als andere, z. B. xterm unterstützt Farben. Die Zeilen und Spalten werden automatisch aktualisiert. Wenn Sie vt100 verwenden, werden standardmäßig 24 Zeilen mal 80 Spalten angezeigt, wenn Sie die Größe Ihres Terminals ändern. Überprüfen Sie diese unix.stackexchange.com/questions/43945/… , es könnte besser als ich erklären.
BitsOfNix
Es ist das Terminalverhalten, nicht die Shell. Die Einstellungen des Terminalemulators sind unabhängig vom verwendeten Tool identisch. Der Unterschied wird hier ausführlich
Leonid
@Leonid, nicht genau, wenn Sie Putty verwenden, können Sie es definieren und es wird beim Verbinden aktualisiert, wenn der Benutzer kein TERM definiert. Wenn der Benutzer es definiert hat, haben Sie Recht, egal welches Tool es ist, die Einstellung in der Benutzerumgebung hat Vorrang.
BitsOfNix
Nur eine Anmerkung zu dieser Lösung: YMMV. Es ist nicht immer "xterm". Unter Verwendung von dwm (Dynamic Window Manager) mit dmenu unter FreeBSD 10 musste ich das Terminal mit "rxvt" fälschen, um Szenario 1 zu erhalten. Sie können die Begriffseinstellung auch überspringen, indem Sie Ihrer ~ / .vimrc-Datei "set term = rxvt" hinzufügen .
Ryder
18

Solches Verhalten war das einzige, was mich davon abhielt, es zu benutzen screen. Es benutzt das "screen" Terminal und das Ändern auf "xterm" hat nicht geholfen.

Das Hinzufügen einer altscreen onOption in ~ / .screenrc löste das Problem. Aus dem Handbuch des Bildschirms:

altscreen on|off

If set to on, "alternate screen" support is enabled in virtual terminals, just like in xterm.  Initial setting is `off'.
BartBiczBoży
quelle
@ Fox OP erwähnt nichts über das von ihm verwendete TERM, daher kann dies nur eine alternative Antwort sein. Auf jeden Fall ist diese Seite ganz oben, wenn Sie nach Bildschirmproblemen suchen.
BartBiczBoży
2
Das hat den Trick gemacht! Stichwörter: "vim beendet visuelle Artefakte Terminal"
Jay Taylor
0

Ich habe alle diese Optionen ausprobiert, aber das Ergebnis war nicht das, was ich erwartet hatte. !clearwürde den gesamten Bildschirm löschen und nicht die früheren Bash-Befehle zurücklassen.

Eine einfache und korrekte Lösung besteht darin, die Zeichenfolge für den Terminaltyp xtermund die Terminalgeschwindigkeit 38400,38400unter Terminaldetails in den Kitteinstellungen unter Verbindung-> Daten auf festzulegen.

Speichern Sie die Einstellungen und Sie können loslegen.

Vinaya Rajanna
quelle