Correzione di CTRL- * in vim nella schermata GNU


10

Quando eseguo vim sotto la schermata GNU, sto scoprendo che le combinazioni di CTRLcon i tasti freccia e Pg * non funzionano come previsto.

Sto usando il vim-gnomepacchetto Ubuntu 10.10 .

Su un'altra macchina, anche con Ubuntu, funzionava senza problemi; sfortunatamente non ho questa configurazione disponibile per me ora.

C'è una domanda correlata qui: Come riparare Ctrl + frecce in Vim?

Tuttavia, la soluzione suggerita è quella di rimappare le combinazioni di tasti di vim per lavorare con l'emulatore di terminale, in quel caso PuTTY. Non ricordo di aver fatto nulla del genere e sospetto che esista un'opzione di configurazione dello schermo che risolverà questo problema.

C'è anche un thread nella mailing list gnu-screen che suggerisce che eseguire Vim tramite $ TERM=xterm vimsia una soluzione o soluzione alternativa appropriata. Funziona, ma sono un po 'preoccupato che potrebbero esserci effetti collaterali. Inoltre, non sembra abbastanza familiare per essere la soluzione che ho impostato sull'altra macchina (se fosse necessaria una soluzione).


+1 - Stavo avendo lo stesso problema e - come mi hai suggerito - l'aggiunta term xtermal mio ~/.screenrcfile l'ha risolto per me. Grazie ancora!
Justin Ethier,

Risposte:


4

Come intuito nel suo aggiornamento, l'aggiunta term xtermal ~/.screenrcfile sembra risolvere questo problema.


Bene .. sì, ma sto cercando una sorta di spiegazione sul perché screennon propagare la $TERMvariabile d'ambiente invece di sostituirla con "screen". Presumibilmente ci sono alcune circostanze in cui è importante avere $TERM == screen.
intuito il

3
@intuited: il motivo per cui Screen set TERM=screenè che le applicazioni in esecuzione all'interno comunicano all'interno di un terminale Screen: le sequenze di controllo che inviano e ricevono sono quelle di Screen, non quelle di qualsiasi terminale Screen stesso venga visualizzato. Poiché è possibile scollegare una sessione dello schermo e ricollegarla a un diverso tipo di terminale, è necessario questo livello di riferimento indiretto.
Gilles 'SO-smetti di essere malvagio' il

@Gilles: Grazie, sospettavo qualcosa del genere. A quali tipi di problemi potrebbe derivare dal reimpostarlo xterm?
Intuito il

1
Non molto, perché xterm e lo schermo sono per lo più compatibili. Ognuno ha alcune funzionalità che l'altro non ha, e se menti alle applicazioni, potrebbero usare una funzionalità che in realtà non funziona. Confrontare l'output infocmp screene infocmp xterm, e le sequenze di escape schermo con le sequenze di escape xterm . Non ho una ripartizione da offrire; alla maggior parte delle applicazioni non dispiacerà, ma alcune potrebbero comportarsi in modo fastidioso.
Gilles 'SO- smetti di essere malvagio' il

2

Esistono un paio di altri modi per impostare il terminale che funziona nei processi in esecuzione:

  • In un'istanza di schermata in esecuzione, premendo ^A- :ed eseguendo il comando term xterm, le schermate appena aperte in tale istanza iniziano con la $TERMvariabile di ambiente impostata su xterm; questo a sua volta si propaga alle vimistanze invocate . Queste istanze vim mostreranno un comportamento corretto rispetto alle combo CTRL; Non ho ancora scoperto effetti collaterali di questa strategia. Questo comando non ha alcun effetto sulle schermate esistenti. Naturalmente questo comando può essere utilizzato in un ~/.screenrcfile, quindi è possibile che questo metodo sia stato utilizzato sull'altra macchina.

  • In un'istanza vim in esecuzione, il comando set term=xtermfarà funzionare le combinazioni CTRL in quell'istanza vim. Questo ha l'effetto collaterale di disconnettere gli Appunti X (cioè @*e @+) per motivi che non ho ancora capito. È interessante notare che l'effetto collaterale degli appunti si verifica anche quando il comando :set term=screenviene eseguito in un'istanza vim iniziata con $TERM=xterm.


Questa risposta è stata presa dagli aggiornamenti del PO. Tutto quello che ho fatto è stato riformattare e riformulare un po '.
phunehehe,

2

Il problema di fondo è che la mappatura effettuata screentra il terminale effettivo (identificato dalla TERMvariabile di ambiente all'esterno screen) e l'emulazione all'interno screenè incompleta.

Se ti capita di testarlo (usando vttest o tack ), potresti notare carenze per

  • colori
  • chiavi speciali

Il tentativo di risolvere questi problemi modificando termin .screenrcpresenta l'inconveniente che funziona solo per una data effettiva-terminale, e non è portabile su altre implementazioni terminali. Le note di documentazione

L'uso del termine comando è sconsigliato per scopi non predefiniti.

Esiste un'altra soluzione (con un diverso svantaggio), utilizzando questa funzionalità dalla screen documentazione :

Quando lo schermo cerca di capire da solo il nome di un terminale, cerca innanzitutto una voce chiamata schermo. termine , dove termine è il contenuto della $TERMvariabile. Se tale voce non esiste, lo schermo prova screen(o screen-w, se il terminale è largo (132 cols o più)). Se anche questa voce non può essere trovata, vt100viene utilizzata come sostituto.

ncurses fornisce diverse utili descrizioni dei terminali alternativi per questo caso, ad esempio screen.xterm-new , per riparare i problemi nella mappatura dello schermo. In pratica, utilizzo TERM=xterm-newe, quando eseguo lo schermo, ottengo una mappatura utilizzabile dei tasti funzione.

Facendo riferimento alle termimpostazioni dello schermo , nei test potresti notare che ci sono ancora problemi con la mappatura, che sono affrontati in queste alternative. Se fosse possibile ottenere una descrizione accurata del terminale utilizzando term, queste alternative sarebbero semplici alias screen. Non sono.

ncurses non fornisce screen.xterm(sic) perché:

  • TERM=xtermè ampiamente utilizzato per gli emulatori terminali che differiscono da xterm; l'aggiunta di questa mappatura aggraverebbe solo quella situazione (vedi ad esempio Perché non usare semplicemente TERM impostato su "xterm"? nelle FAQ di ncurses)
  • il nome alternativo ha screen.xtermmeno probabilità di essere installato su sistemi remoti (vedere il commento di modifica da giugno 2015 nel database del terminale).

Nel complesso, tuttavia, l'uso di nomi alternativi è un miglioramento rispetto all'uso termnel tuo .screenrc: risolve più problemi di quanti ne crei. Il contrario è vero per l' termimpostazione.

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.