Wie kann ich den Inhalt, den ich gelesen habe, nach dem Beenden von man behalten?

24

So nutzen wir man whateverVerbrauch und andere Informationen in Bezug auf dem erhalten whateverBefehl, wenn der entsprechende Abschnitt von Informationen gefunden wird, würde Ich mag das beenden manBefehl mit der Info auf dem Bildschirm nach links. So kann ich den nächsten Befehl mit dem Schiedsrichter oben eingeben. Der manBefehl beendet jedoch den gesamten Bildschirm, um den alten Bildschirm wiederherzustellen vim. Gibt es einen Weg, dies zu erreichen?

NathaneilCapital
quelle
Alle Vorschläge sind gut, aber Sie können auch einfach ein zweites Fenster öffnen, um die Manpage anzuzeigen. Und es gibt wahrscheinlich auch GUI-Manpage-Viewer.
Barmar

Antworten:

38

Ich glaube, es geht nicht so sehr um sich manselbst, sondern um den Pager Ihrer Wahl ( PAGERUmgebungsvariable) in Kombination mit dem verwendeten Terminal.

Ich vermute, Ihr Pager ist wahrscheinlich less(typischer Standard-Pager heutzutage und passt zur Beschreibung).

lessEs gibt eine Option -X, mit der Sie ein Verhalten erzielen können, das dem entspricht, was Sie suchen.

   -X or --no-init
          Disables sending the termcap initialization and deinitialization
          strings  to  the  terminal.   This is sometimes desirable if the
          deinitialization string does something unnecessary, like  clear‐
          ing the screen.

ZB PAGER="less -X" man mankann es zum Testen verwendet werden. Wenn Sie dieses Verhalten bevorzugen, sollten Sie es möglicherweise PAGERdauerhaft auf diesen Wert einstellen .

Håkan Lindqvist
quelle
Leider bringt es die Scroll-Geschichte durcheinander.
Musik
@musiKk Funktioniert für mich unter Ubuntu 16.04 mit einem intelligenten Unicode-Terminal (nicht der Linux-Konsole) und man 2.7.5
cat am
3
@musiKk: Wenn Sie in der Lage sein möchten, nach dem Verlassen des Pagers durch die Manpage zurückzuscrollen, müssen Sie sich darauf beschränken, in der Manpage (nach Zeilen oder Seiten) vorwärtszuscrollen, nicht den üblichen zufälligen Zugriff.
Peter Cordes
1
Oder Sie könnten es verwenden LESS=-X, um Änderungen zu vermeiden PAGER(Ich vertraue nicht zu 100% darauf, dass es in allen Programmen mit einem
solchen
11

Wenn Sie weniger als Ihren Pager verwenden (was sehr häufig vorkommt), müssen Sie keine Änderungen an Ihrem Pager vornehmen. Führen Sie einfach die E / A-Umleitung durch:

man <whatever you want to man> | cat -

Dadurch wird eine Kopie an das Terminal gesendet, sodass Sie bei Bedarf nach oben scrollen können.

Brennen Smith
quelle
1
Ein Problem bei diesem Ansatz ist, dass es bei langen Handbuchseiten möglicherweise schwierig ist, zu dem für Sie interessanten Teil zurückzukehren, und Sie nicht sowohl diesen Teil als auch die aktuelle Befehlszeile sehen.
Juli
Keiner der anderen Vorschläge behebt dieses Problem - es ist nur in einem einzigen Konsolenfenster enthalten. Aber wenn dies gesagt ist, können Sie Ihren Befehl immer schreiben, einen Bildlauf nach oben und den Bildlauf zurück zu Ihrem halb geschriebenen Befehl durchführen.
Brennen Smith
Mein Vorschlag hat dieses Problem definitiv gelöst. Sie verlassen den Befehl man, wenn die für Sie interessante Handbuchseite auf dem Bildschirm angezeigt wird, und Sie können Ihren Befehl eingeben, wobei diese Seite weiterhin auf demselben Bildschirm angezeigt wird.
Juli
2
-bedeutet Standard in, catgeht aber davon aus, dass
loa_in_
1
Es ist hauptsächlich für die Semantik - ich mag es immer, mit stdin explizit umzugehen.
Brennen Smith
5

Da nicht nur lessandere Textanwendungen, sondern auch andere vimTextanwendungen das gleiche äußerst ärgerliche Merkmal aufweisen, besteht meine Aufgabe darin, dem Terminal einfach die Möglichkeit zu nehmen, die beteiligten Befehle aus der terminfoDatenbank zu unterstützen.

Diese Befehle sind smcupund rmcup, die das Einschalten und eine Bewegung ermöglichen, bei der der cupBefehl (Cursorposition) erlaubt war.

Hier ist eine Shell-Funktion, mit der ich die Aufgabe automatisiert habe. Sie funktioniert zumindest mit Solaris und wahrscheinlich den meisten Linux-Distributionen:

fixterminfo()
{
  (
    [[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
    cd /tmp/terminfo || return
    TERM=xterm infocmp > xterm.src.org
    sed -e 's/rmcup=[^,]*,//'  -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
    if diff xterm.src.org xterm.src
    then
      echo xterm terminfo already patched
      return
    fi
    TERMINFO=/tmp/terminfo tic xterm.src
    if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
      XTERM=/usr/share/lib/terminfo/x/xterm
    else
      if [ -f /lib/terminfo/x/xterm ] ; then
        XTERM=/lib/terminfo/x/xterm
      else
        if [ -f /usr/share/terminfo/x/xterm ] ; then
          XTERM=/usr/share/terminfo/x/xterm
        else
          echo xterm terminfo not found ; return
        fi
      fi
    fi
    if [ ! -f ${XTERM}.org ]
    then
      sudo cp ${XTERM} ${XTERM}.org || return
    fi
    cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
  )
}

Wenn Ihr Terminaleintrag nicht auf zurückgreift xterm, sollten Sie ihn xtermim Skript durch den richtigen Terminalnamen ersetzen .

jlliagre
quelle
1
Ja, aber dann bricht dies andere Programme (nicht unbedingt Pager oder Flüche, aber Readline-ähnliche Editoren usw.)
Katze
1
@cat Nicht, dass ich ein vorhandenes überprüft hätte, aber ich habe nach Verwendung dieser Problemumgehung keine Probleme mit anderen Programmen bemerkt. Haben Sie Beispiele für Programme, die sich merkwürdig verhalten würden? Ich vermute auch, wenn sie versagen, ist das ein Problem auf ihrer Seite. Ein Terminal-Emulator sollte nicht alle Terminfo-Funktionen unterstützen. Es wird nur bekannt gegeben, welche es unterstützt, und es liegt an der Anwendung, sich damit zu befassen.
Juli
3

Sie können die Ausgabe an den catBefehl weiterleiten

man man|cat

oder verwenden Sie es anstelle des Standard-Pagers, wie in diesem Beispiel, das man auf sich selbst ruft:

PAGER=cat man man
SimoneLazzaris
quelle
2

Ohne den Pager zu modifizieren, eine Lösung mit Pipes , die in den meisten Umgebungen funktionieren kann:

Beispiele für man ls

  • Lassen Sie die gesamte Mann - Seite auf dem Bildschirmman ls | cat
  • Lesen Sie einen Paginierung Mann - Ausgang, mit der Möglichkeit , es jederzeit mit verlassen q :man ls | more
  • Man filtert Inhalte mit einem Muster und behält die passenden Linien auf dem Bildschirm:man ls | grep somestring
marcanuy
quelle
-3

Es ist 2016, öffne einfach ein zweites Terminal oder einen Tab oder ein Fenster oder lies den Mann online.

user362328
quelle
Und das ist die naheliegende praktische Lösung.
Braiam
1
@Braiam Nicht praktisch, wenn sich das Terminal auf dem Handybildschirm befindet.
NathaneilCapital
@ NathaneilCapital Klingt wie es Zeit ist, tmux zu lernen.
Michael Hampton
-3

Auch auf meinen Servern (FreeBSD) installiere ich X und xfce. Dann reserviere ich einen großen Puffer (z. B. 10 000 Zeilen) für die Terminalemulatoren, damit ich die Manpage in einer von ihnen vollständig herausscrollen und eine separate Terminalinstanz verwenden kann, um den Befehl zusammenzustellen. Funktioniert ein Vergnügen.

MMacD
quelle