Scorri all'interno dello schermo o metti in pausa l'uscita


383

Uso lo schermo per le attività della riga di comando mentre gestisco i server in cui lavoro. Di solito eseguo piccoli comandi (principalmente attività del file system) ma a volte eseguo attività più estese (come DBA).

L' output di questi compiti è importante per me. Poiché utilizzo Ubuntu e OS X (entrambi Terminal Windows) per le mie attività, tuttavia ho bisogno di utilizzare lo schermo, lo scorrimento non è disponibile, quindi qualsiasi output lungo (penso che una tabella di 500 righe da una selezione) sia invisibile per me. La rotellina del mouse è fuori discussione.

Quando dico "scroll è invisibile per me, intendo questo:

in alto durante l'utilizzo dello schermo, in Mac OS X, durante lo scorrimento

Stavo pensando a due opzioni:

  1. Metti in pausa (pensa paginato ) l'output di un determinato comando. Quando inizia l'output, mi permette di leggere cosa sta succedendo, quindi premo "Invio", quindi l'output continua fino a quando non c'è più niente da mostrare.

  2. Scorri all'interno dello schermo. Ma non so se questo è possibile.

Certo, non so se quelle opzioni siano effettivamente possibili . Se lo sono, come possono raggiungerli? Altre alternative saranno ben accolte.

Risposte:


526

Lo schermo ha il proprio buffer di scorrimento, in quanto è un multiplexer terminale e deve gestire diversi buffer.

Forse c'è un modo migliore, ma sono abituato a scorrere usando la "modalità copia" (che puoi usare per copiare il testo usando lo schermo stesso, anche se questo richiede anche il comando incolla):

  • Premi la combinazione del prefisso dello schermo ( C-a/ control+ Aper impostazione predefinita), quindi premi Escape.

  • Spostati su / giù con i tasti freccia ( e ).

  • Al termine, premi qo Escapeper tornare alla fine del buffer di scorrimento.

(Se invece di qo Escapesi preme Entero Returne quindi si sposta il cursore, si selezionerà il testo da copiare, e premendo Entero Returnuna seconda volta lo si copierà. Quindi si può incollare con C-aseguito da ].)

Naturalmente, puoi sempre usare moree less, due cercapersone comunemente usati, che possono essere sufficienti per alcuni comandi.


5
Inoltre, premendo q si esce dalla modalità di copia senza copiare nulla (e si preme un pulsante in meno). Questo potrebbe essere nella spiegazione vi, ma il collegamento ora è interrotto.
Nathanael Farley,

3
Anche premendo [Esc] si esce dalla modalità copia.
Sopalajo de Arrierez,

7
un modo per page-up?
Sungguk Lim,

10
Il buffer di scorrimento sembra supportare comandi simili a vi: Cb e Cf per scorrere la pagina su / giù.
Touko,

3
In modalità copia i miei pulsanti PageUp e PageDown funzionano. La prima pressione sposta solo una riga, ma successivamente scorre come al solito.
Elia,

171

L'uso del screenbuffer come indicato da njsg è una buona soluzione. Puoi anche disabilitare il buffer di testo alternativo nelle informazioni sul termcap di xterm nella schermata. Quando disabilitato, puoi usare le barre di scorrimento (e la rotellina del mouse) per scorrere su e giù.

Aggiungi questo al tuo ~/.screenrc.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

Puoi leggere altre discussioni qui .


1
imposta il limite di scorrimento digitando Ctrl + A,:, digita "scrollback 10000" o qualunque valore numerico desideri
lobi,

2
Usando questo, anche i tipici tasti di scelta rapida dei terminali Linux (shift + pg su / giù home / fine) funzionano, grazie.
tokland

5
Questo solo suggerimento mi fa riconsiderare usando lo schermo ...
Fish Monitor

5
+1 Soluzione più elegante di quella accettata.
Ryan Yoosefi,

9
ti dà solo l'output che screenti è stato dato da quando l'hai avviato, ovvero ricollegare altrove significa che non puoi scorrere verso l'alto e vedere cosa è successo prima. ma puoi comunque recuperare l'output precedente utilizzando la soluzione nella risposta accettata, quindi puoi utilizzare nuovamente la rotellina del mouse.
Phil

28

Tutte queste risposte hanno indicato come navigare all'interno di una sessione dello schermo, ma esiste una funzionalità integrata nel comando schermo per memorizzare tutto in un file attraverso l' -Largomento secondo il manuale che recita:

-L dice allo schermo di attivare la registrazione automatica dell'output per le finestre.

così puoi fare:

screen -L -S testscreen

e creerà un file con screenlog.#dove #è un numero per quella schermata a partire da 0.

Questo ha molti vantaggi e quelli più importanti per me sono:

  1. Tenere traccia di ciò che ho fatto poiché posso salvare il file di registro nella cartella del progetto per riferimento futuro.
  2. È possibile monitorare in modo passivo e inattivo il processo:
    • utilizzare tailfper monitorare i progressi in tempo reale senza essere collegati allo schermo.
    • utilizzare grepper verificare un determinato termine nel registro e produrre notifiche (e-mail, popup, voip, ecc.). Questo può essere applicato su più schermi senza che tu li guardi attivamente.

1
Non ero a conoscenza della -Lbandiera dello schermo, questo è molto utile! +1
Kredns il

1
voglio solo aggiungere altro, screenlog.#viene generato nella stessa cartella in cui si esegue il screencomando
Lê Quang Duy

3

Ho avuto successo nel paging di base eseguendo il piping dei contenuti more, ad esempio:

ls -l | more

Oppure, se si desidera un output a colori per casi d'uso come l'evidenziazione della sintassi, è possibile utilizzare

ls -l --color=always | more

Ciò si traduce in output che posso facilmente sfogliare attraverso una schermata alla volta. Non ho provato la modifica di @uther a ~/.screenrcma sembra preferibile come soluzione duratura quando è disponibile un mouse.

Per provarlo, puoi andare su questo emulatore BusyBox e poi ...

cd ~/bin
ls -l --color=always | more

Utilizzare la barra spaziatrice per sfogliare i risultati del ls -lcomando o utilizzare il tasto Invio per spostarsi tra i risultati riga per riga.

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.