Gibt es eine Möglichkeit, "less" zu beenden, ohne den Bildschirm zu löschen?

68

Relativ oft möchte ich aufhören, lessaber das, was ich auf dem Bildschirm gesehen habe, lassen, um darauf zurückzugreifen. Gibt es eine Möglichkeit, dies zu tun? Problemumgehungen?

(Meine derzeitige Problemumgehung besteht darin, zu beenden und dann zu verwenden more. Daher wird jede bessere Problemumgehung begrüßt. Das Ideal wäre etwas, das ich verwenden kann, wenn ich schon drinnen bin less, vielleicht mit einer Shell-Einstellung oder einem Skript.)

Mein Desktop ist OSX, aber ich verwende RHEL- und Ubuntu-Server.

Steve Bennett
quelle
1
Das Einlesen einer langen Ausgabe (wie in git diffoder git log) less -Xbeansprucht den Bildlaufpuffer in meinem Terminal und entfernt einen Großteil der vorherigen Ausgabe. Ich würde es lieben, wenn ich lessnur mit dem letzten Screenful der Ausgabe zum Zeitpunkt des Ausstiegs beenden könnte. dh nach dem Verlassen würde nicht mehr als eine Seite des Bildlaufpuffers entnommen less. Irgendwelche Ideen?
Musiphil
Übrigens -Rist in der Regel eine sicherere Wahl als -r.
Musiphil
Vielen Dank. Für diejenigen, die sich fragen:-R is "Like -r, but only ANSI "color" escape sequences are output in "raw" form. Unlike -r, the screen appearance is maintained correctly in most cases."
Steve Bennett
@musiphil Vielleicht -c?
Vanessa Phipps
@MatthewPhipps: Ich denke, es -cgeht darum, wie man den Bildschirm aktualisiert, wenn man sich im Inneren bewegt less.
musiphil

Antworten:

68

Dies ist eine Funktion des verwendeten Terminalemulators (xterm, gnome-terminal, konsole, screen). Ein alternativer Bildschirm oder Altscreen wird gestartet, wenn Programme wie lessoder vimaufgerufen werden. Dieser Altscreen verfügt über keinen Verlaufspuffer und wird sofort beendet, wenn Sie das Programm beenden und zum ursprünglichen Bildschirm zurückkehren, in dem der Verlauf und die Platzierung des vorherigen Fensterinhalts wiederhergestellt werden.

Sie können verhindern less, dass ein Altscreen gestartet wird, indem Sie das Argument "-X" übergeben.

less -X /path/to/some/file

Sie können auch "-X" als Umgebungsvariable übergeben. Wenn Sie also verwenden bash, platzieren Sie dies in ~/.bashrc:

export LESS="-X"

Dies deaktiviert jedoch die Initialisierung und Deinitialisierung von TermCap (Terminalfähigkeit), sodass andere Ansichten, wenn Sie sie verwenden, lessmöglicherweise deaktiviert sind.

Eine andere Möglichkeit wäre, screendie Option altscreen offin Ihrem Browser zu verwenden und einzustellen ~/.screenrc. lesslöscht den Bildschirm nicht und sollte die Farbformatierung beibehalten. Vermutlich tmuxwird die gleiche Option haben.

Dieser Blogeintrag beschreibt das Problem und bietet verschiedene Lösungen gnome-terminalmit unterschiedlichem Erfolg.

George M
quelle
2
Perfekt. Gibt es einen Nachteil?
Steve Bennett
2
Warten Sie, ich habe bereits einen entdeckt - die Ausgabe von git log(und wahrscheinlich anderen farbigen Befehlen) ist durcheinander.
Steve Bennett
1
@SteveBennett Das ist klein genug, ich würde es zu einem Alias ​​machen:alias les="/usr/bin/less -X"
bonsaiviking
4
Hey, ich glaube , ich nur ein Gegenmittel gegen die entdeckte git logFrage oben: export LESS="-r -X". (Keine Ahnung, was die Nebenwirkungen davon sind ...)
Steve Bennett
5
Setzt gitdie LESSVariable tatsächlich auf, FRSXwenn sie beim Ausführen des Pagers nicht gesetzt ist. Sie können sie also einfach LESSnicht setzen und lesswerden automatisch mit ausgeführt -FRSX. Suchen Sie nach core.pagerin git-config(1)für weitere Informationen.
Musiphil
4

Georges Lösung hat bei mir nicht funktioniert, aber diese Lösung (aus dem Blogeintrag, der in seiner Antwort verlinkt ist).

  1. $ infocmp -I xterm > ~/xterm-noclear.src

  2. Bearbeiten Sie ~ / xterm-noclear.src

    • ändere den Namen in der zweiten Zeile von 'xterm' in 'xterm-noclear' oder was auch immer dir passt (ändere auch 'xterm-debian' wenn es vorhanden ist)

    • entferne die Anweisungen 'smcup' und 'rmcup' (zB "smcup = \ E [? 1049h," und "rmcup = \ E [? 1049l,")

  3. $ mkdir ~/.terminfo

  4. $ tic ~/xterm-noclear.src (x / xterm-noclear sollte in Ihrem ~ / .terminfo-Verzeichnis erscheinen)

  5. $ export TERM=xterm-noclear (Überprüfen Sie jetzt das Verhalten von less und fügen Sie, wenn Sie damit einverstanden sind, die Zeile mit der Exportanweisung zu Ihrem ~ / .profile hinzu.)

(Ich habe diese Anweisungen direkt aus @ jahs abgelehnter Bearbeitung von Georges Antwort kopiert.)

prl
quelle
4

Ich erinnere mich, dass dies der Fall ist, less -SEXwenn ich die Ausgabe auf dem Bildschirm sichern muss, aber keine Zeilen umbrechen möchte. Zum Beispiel docker ps | less -SEX:

  • -S
    • Scrollen statt wickeln
    • Wenn Sie die -ETaste loslassen, können Sie mit den Pfeiltasten scrollen
  • -E
    • Beenden Sie, wenn Sie das EOF erreichen
  • -X
    • Vermeiden Sie das Austauschen von Begriffen
    • Der "Gedächtnisteil" ist, dass ich weiß, was S und E tun, also muss dies der andere Teil sein. (Und unser Grund für die Übergabe dieses Befehls an den Speicher ist, dass wir eine nicht umschlossene Ausgabe sichern (keine interaktive Sitzung starten) möchten.

Wenn Sie sich nicht erinnern können less -SEX, gibt es nicht viel Hoffnung für Sie. Einfach jedes Mal neu googeln, wenn ich denke.

Bruno Bronosky
quelle
Der Typ hat ein Problem und Sie bieten ihm weniger Sex an?
Yossico