Come posso conservare il contenuto che stavo leggendo dall'uomo dopo che ho smesso?


24

Quindi usiamo man whateverper ottenere l'utilizzo e altre informazioni relative al whatevercomando, quando viene trovata la relativa sezione di informazioni, vorrei uscire dal mancomando con le informazioni lasciate sullo schermo. Quindi posso digitare il comando successivo con l'arbitro sopra. Ma il mancomando chiude l'intero schermo per ripristinare il vecchio schermo simile vim. C'è un modo per raggiungere questo obiettivo?



Tutti i suggerimenti sono buoni, ma puoi anche aprire una seconda finestra per visualizzare la pagina man. E probabilmente ci sono anche visualizzatori di pagine man della GUI.
Barmar,

Risposte:


38

Credo che questo non riguardi tanto se manstesso, quanto piuttosto il tuo cercapersone di scelta ( PAGERvariabile d'ambiente) combinato con il terminale in uso.

Immagino che il tuo cercapersone sia probabilmente less(cercapersone predefinito tipico oggi e si adatta alla descrizione).

lessha un'opzione -Xche può darti un comportamento in linea con quello che stai cercando.

   -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.

Ad esempio, PAGER="less -X" man manpotrebbe essere utilizzato per testarlo e, se ritieni che questo comportamento sia preferibile, potresti considerare di impostare PAGERquesto valore in modo permanente.


Sfortunatamente rovina la cronologia di scorrimento.
musiKk,

@musiKk Funziona bene per me su Ubuntu 16.04 con un terminale unicode intelligente (non la console Linux) e man 2.7.5
cat

3
@musiKk: se vuoi essere in grado di scorrere indietro nella pagina man dopo essere uscito dal cercapersone, devi limitarti a scorrere in avanti nella pagina man (per linee o pagine), non al solito accesso casuale.
Peter Cordes,

1
Oppure potresti usare LESS=-X, per evitare di dover cambiare PAGER(non mi fido al 100% che funzioni in tutti i programmi con uno spazio simile, anche se funziona nell'uomo.)
Casuale 832

11

Se si esegue meno come cercapersone (che è molto comune), non è necessario gestire la modifica del cercapersone, è sufficiente eseguire il reindirizzamento I / O:

man <whatever you want to man> | cat -

Questo stamperà una copia sul terminale in modo da poter scorrere verso l'alto quando ne hai bisogno.


1
Un problema con questo approccio è che con lunghe pagine di manuale, potrebbe essere difficile tornare alla parte di interesse per te e non vedrai sia quella parte che la riga di comando corrente.
jlliagre,

Nessuno degli altri suggerimenti risolve questo problema: è inerente a un'unica finestra della console. Detto questo, puoi sempre scrivere il tuo comando, scorrere un po 'verso l'alto e scorrere verso il basso fino al comando mezzo scritto.
Brennen Smith,

Il mio suggerimento risolve definitivamente questo problema. Lasciate il comando man quando la pagina di manuale che vi interessa è sullo schermo e potete digitare il vostro comando con quella pagina ancora visibile sullo stesso schermo.
jlliagre,

2
-indica lo standard ma catpresuppone comunque
loa_in_

1
È principalmente per la semantica - mi piace sempre essere esplicito con stdin.
Brennen Smith,

5

Poiché non solo lessma anche altre applicazioni di testo come vimmostrano la stessa caratteristica estremamente fastidiosa, ciò che faccio è semplicemente rimuovere la capacità del terminale di supportare i comandi coinvolti dal terminfodatabase.

Questi comandi sono smcupe rmcup, che sono stati progettati per consentire l'accensione e una mossa in cui il cupcomando (posizione del cursore) era consentito.

Ecco una funzione shell che ho usato per automatizzare l'attività, funziona almeno con Solaris e probabilmente la maggior parte delle distribuzioni Linux:

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}
  )
}

Se la voce del terminale non esegue il fallback xterm, è necessario sostituirla xtermcon il nome terminale corretto nello script.


1
Sì, ma questo interrompe altri programmi (non necessariamente cercapersone o maledizioni, ma editor simili a readline, ecc.)
cat

1
@cat Non che ne abbia verificato uno esistente, ma non ho mai notato problemi con altri programmi dopo aver utilizzato questa soluzione alternativa. Hai esempi di programmi che si comporterebbero in modo strano? Ho anche il sospetto che se falliscono, questo è un problema dalla loro parte. Un emulatore di terminale non dovrebbe supportare tutte le funzionalità terminfo disponibili. Pubblicizza solo quelli che supporta e spetta all'applicazione occuparsene.
jlliagre,

3

È possibile reindirizzare l'output al catcomando

man man|cat

o usalo al posto del cercapersone predefinito, come in questo esempio che invoca man su se stesso:

PAGER=cat man man

2

Senza modificare il cercapersone, una soluzione con pipe che può funzionare nella maggior parte degli ambienti:

Esempi per man ls

  • Lascia l'intera pagina man sullo schermoman ls | cat
  • Leggi un output man impaginato , con la possibilità di lasciarlo in qualsiasi momento con q :man ls | more
  • filtra i contenuti di man con un pattern e mantieni le linee corrispondenti nello schermo:man ls | grep somestring

-3

è il 2016, basta aprire un secondo terminale o scheda o finestra o leggere l'uomo online.


E questa è l'ovvia soluzione pratica.
Braiam,

1
@Braiam Non pratico se il terminale è sullo schermo del telefono cellulare.
NathaneilCapital

@NathaneilCapital Sembra che sia tempo di imparare tmux.
Michael Hampton

-3

Anche sui miei server (FreeBSD) installo X e xfce. Quindi allocare un grosso buffer (ad esempio 10.000 righe) per gli emulatori di terminale in modo da poter scorrere completamente la pagina man in uno di essi e utilizzare un'istanza di terminale separata per assemblare il comando. Funziona a meraviglia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.