Come sostituire il buffer dello schermo di VIM con l'attività bash precedente dopo aver chiuso?


14

Sto cercando di scoprire cos'è una funzione bash (o vim). Ecco lo scenario. Sono in un terminale Bash, quindi modifica qualcosa con VIM, quindi esci di nuovo a Bash. In alcuni terminali, la schermata della sessione vim scompare per mostrare l'attività della shell bash precedente (questo è quello che voglio?).

In altri, il buffer dello schermo della sessione vim rimane (nascondendo la vecchia attività della shell bash). Dovrò cancellare lo schermo o aspettare fino a quando la mia attività bash spinge fuori quel buffer di sessione vim dallo schermo.

Come posso controllare questo comportamento per sostituire il buffer della sessione vim con l'attività bash precedente?

Grazie Tim


Risposte:


10

Vim invia t_tie t_ksal terminale quando viene avviata una sessione t_tee t_kequando termina. Le sequenze t_tie fanno t_tesì che il terminale passi alla sua schermata alternativa.

Nel tuo ~/.vimrcfile puoi vimlasciare il documento sullo schermo quando esce includendo questa riga:

set t_ti=""

se hai una linea simile a quella, rimuovendola dovrebbe apparire il contenuto del terminale precedente quando esci vim.


4

Una causa di questo problema può essere l'utilizzo del programma screen. Trovo che quando sono in una screensessione vim non può restituire lo stato del terminale.

Non sono sicuro se sia specifico per lo schermo o per la combinazione schermo / vim in Ubuntu 15.10. Stessa causa descritta sopra, immagino screenabbia termini diversi.


2
L'aggiunta altscreen onal file ~ / .screenrc risolve il problema dello schermo.
BartBiczBoży,

3

Aggiungi semplicemente una riga al tuo ~/.bash_profilefile per esportare TERM come xterm ogni volta che accedi. Fare come segue;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

Ora la prossima volta che accedi il tuo problema sarà risolto, e se non vuoi ripetere il login puoi fare uno dei ...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile

1
non sarebbe export $TERM?
Chrsblck,

1
@chrsblck: No, perché exportesporta il nome (ad es. TERMin questo caso) come variabile di ambiente anziché come variabile locale. Se si usasse export $TERMin questo esempio, $TERMvar si risolveva xtermimpostando env var $xterm, che probabilmente non è definito. Bella domanda però, sembra sempre sbagliata anche a me.
ekerner,

2

Tim. Entrambe le risposte sopra sono corrette. Vim commuta il terminale in una "schermata alternativa" se la capacità di farlo è definita nella voce termcap per $ TERM.

Dici "in alcuni terminali (... funziona bene ...)" e "in altri (... funziona male ...)"

Stai eseguendo lo stesso emulatore di terminale per tutti quei terminali?

Ad esempio, sul mio box Linux di casa, ho gnome-terminal, xterm, Konsole, yakuake e probabilmente alcuni altri di cui mi sono dimenticato, insieme ai "terminali virtuali" associati al ctrl-alt-F1 ... ctrl-alt-F6 o giù di lì. La maggior parte di questi può funzionare con la voce termcap "standard" per "xterm", ad eccezione dei terminali virtuali che hanno una definizione di terminale denominata "linux".

Controlla l'emulatore di terminale stesso e il valore di $ TERM sui terminali che funzionano e su quelli che non lo fanno, per vedere cosa c'è di diverso. Inoltre, se hai effettuato l'accesso come utente diverso a volte, questo potrebbe essere al centro del problema, poiché ogni utente ha il proprio .bashrc varie impostazioni possono differire da utente a utente.

Spero possa aiutare!
-pbr


1

Ciò ha a che fare con il terminale e le impostazioni della macchina che si occupano delle informazioni sul terminale. Una soluzione portatile è usare GNU Screen. Apri una finestra per Vim e un'altra per Bash, separando così le due sessioni. Se stai usando un terminale grafico come xterm su X11, Gnome Terminal su Gnome o Terminal.app su OS X, puoi aprire una nuova finestra o scheda per ottenere lo stesso effetto.

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.