2013-07-25 15 views
15

Quando lavoro in terminale, vedo la cronologia dell'ultimo output di esecuzione dei comandi della shell. Se eseguo vim, vedo il file che apro a schermo intero. Quando esco da vim, posso vedere di nuovo la cronologia degli ultimi comandi di shell.: come attivare lo schermo alternativo?

Tuttavia, quando uso vim dallo schermo. Vedo l'impronta del file che stavo modificando alla mia uscita da vim invece della cronologia degli ultimi comandi della shell. Mi piacerebbe vedere la cronologia della shell.

Come posso ottenere questo comportamento?

ho usato:

  • terminal.app e iterm2.app
  • cercato commutazione xterm xterm-256color (in iterm2.app)
  • controllo e deselezionare "Salva linee per lo scorrimento quando un barra di stato dell'app è presente "e" Salva righe per scorrere in modalità schermo alternativo "(in iterm2)
  • aggiungendo termcapinfo xterm ti @: te @ to. screenrc (anche se dovrebbe essere una soluzione al problema opposto, ma perché no provare)
  • sshing alle macchine Linux e provare ad usare lo schermo GNU lì

Fino ad ora non ho ottenuto il comportamento desiderato.

P.S.

Googled un po 'e ha visto i commenti di persone che cercano di risolvere il problema opposto:

Many of you probably know the annoying behaviour of console-based programs like less or vi restoring the screen after exiting so that the text you just had there vanishes.

L'idea principale alla base di questo comportamento è se i programmi utilizzano schermo alternativo per salvare un'immagine della storia della shell e mostralo quando vim esce. Quindi se si vuole risolvere il problema opposto, dovrebbe

exorce the evil alternate screen

risposta

18

UPDATE: avevo dimenticato su una funzionalità di screen che disabilita il supporto dello schermo si alternano per impostazione predefinita.

Aggiungi altscreen on al tuo $HOME/.screenrc per attivarlo. Questo è probabilmente tutto ciò che devi fare; tutto il caos con $TERM, $TERMCAP e $TERMINFO non è probabilmente necessario. Lascerò il resto di questa risposta qui comunque.

Ho avuto questo nel mio .screenrc così a lungo mi è sfuggito di mente.

Per abilitare questa funzione per la sessione corrente, digitare il screen carattere di escape (Cntrl-A per impostazione predefinita) seguito da :altscreen onEnter.

Senza questo, screen non risponderà alle sequenze di escape, anche se sono definite in terminfo o termcap.


vim (e less, e la maggior parte di altri programmi a schermo intero basata su curses) utilizzare i smcup e rmcup stringhe definiti dalla voce terminfo per il terminale. (Questi sono indicati come ti e te, rispettivamente, nel vecchio sistema termcap). smcup passa allo schermo alternativo e rmcup torna alla schermata principale.

Se la voce terminfo non ha queste stringhe, i programmi non saranno in grado di farlo.

Il comando di schermo, per impostazione predefinita, imposta $TERM su "screen". Apparentemente la voce terminfo "schermo" non ha smcup e rmcup.

Se si ha voglia di hackerare le voci di terminfo, è possibile modificare le informazioni esistenti per "schermo" per aggiungere smcup e rmcup. Avrai bisogno del comando infocmp per convertire il tuo terminfo in un testo e tic per riconvertirlo nel formato binario usato da terminfo.

Una soluzione più semplice è impostare la variabile di ambiente $TERM su qualsiasi cosa fosse prima di aver invocato il comando screen. Quasi tutti gli emulatori di terminali in questi giorni sono basati sul vecchio DEC VT100, quindi dovrebbero essere sufficientemente compatibili.

Nel mio sistema, ad esempio, quando accedo ho TERM=xterm; è probabilmente qualcos'altro su MacOS. All'interno di una sessione screen, per impostazione predefinita, avrei:

$ echo $TERM 
screen 

potrei cambiare a xterm in questo modo:

$ export TERM=xterm 

(Anche in questo caso, sostituire "xterm" di tutto ciò che è $TERM sul sistema .)

È inoltre possibile aggiungere

term xterm 

per il tuo $HOME/.screenrc. Infatti, screen ha una serie di opzioni per modificare le impostazioni di termcap/terminfo; man screen e cerca "terminfo" per i dettagli sanguinosi.

+0

Grazie! 'altscreen on' in' $ HOME/.screenrc' e 'Ctl + A' ->': altscreen on' è ciò che ha funzionato per me. – chown

Problemi correlati