Caratteri confondenti SSH in vim / nano sul server remoto


18

... e mi sta facendo impazzire.

Fondamentalmente (questo è successo negli ultimi due mesi), accedo a diversi server CentOS diversi (un Linode, un altro VPS e un host condiviso a cui ho accesso alla shell), eseguendo 5.5, 5.7 e 6, dal mio Mac con OS X Lion, usando Terminal.

Fondamentalmente:

$ ssh username@example.com

[remote-host] $ nano somefile.txt

Una volta che ho iniziato a modificare il file, se uso i tasti freccia per spostarmi intorno al cursore, o ricomincio a cancellare, quindi digito di nuovo, il cursore salta un po 'intorno e, se salvo il file e lo riapro, è ovvio che il cursore era , infatti, saltando dappertutto su una linea senza una ragione apparente.

Alla fine ottengo cose come "Questo è un testo neof". Dopo aver digitato (nell'editor pazzo del cursore) "Questa è una riga di testo".

È un grosso problema quando si tratta di modificare i file di configurazione, perché spesso devo modificare una riga, salvare e chiudere, quindi riaprire solo per assicurarmi che quella riga sia corretta ... quindi modificare un'altra riga ... e sta diventando abbastanza fastidioso .

Ho trovato Linode Lish Shell Vim e Nano problemi di rendering: linee non visualizzate / posizioni del cursore errate , ma non so se ciò si riferisce molto, dal momento che si riferisce specificamente a Lish.


1
Ehi @geerlingguy, ho pubblicato una risposta a questa domanda anni fa quando il tuo nome non significava niente per me, ma ora uso il tuo lavoro regolarmente. Grazie per tutti i tuoi contributi rispondibili!
dbenton,

1
@dbenton - Ti aiuto, tu mi aiuti, siamo una comunità felice :)
geerlingguy

Risposte:


14

[ Aggiornamento: a partire da Mac OS X Mountain Lion 10.8, Terminal supporta la sequenza di escape Backtab, eliminando questo problema.]

La versione (s?) Di nano su quei server a volte invia una sequenza Backtab (ESC [Z) quando si sposta il cursore a sinistra di un carattere, ma Terminal non supporta questa sequenza, quindi nano pensa che il cursore si sia mosso quando non ha ' te la sua idea sulla posizione corrente del cursore non è sincronizzata con il terminale.

Per motivi che non riesco a capire, nano invia un Backtab quando si sposta a sinistra e il cursore è un carattere a destra di un punto di tabulazione. Allo stesso modo, IIRC, invia una scheda (Control-I) quando si sposta a destra e il cursore è un carattere a sinistra di un punto di tabulazione. Non so perché lo faccia attorno alle tabulazioni invece di spostarsi sempre a sinistra / a destra usando le stesse sequenze di caratteri. La versione di nano fornita con Mac OS X Lion 10.7 non lo fa.

Nano lo fa solo quando il terminfo afferma che la cbtfunzionalità è supportata. Il terminfo predefinito per Terminal è xterm-256color, che dichiara questa funzionalità e la mappa sulla sequenza Backtab. Una soluzione alternativa consiste nell'impostare la TERMvariabile di ambiente su qualcosa che non dichiara questa funzionalità. È possibile farlo sul computer locale prima di richiamare ssho nel file di avvio della shell sull'host remoto. Impostarlo su xterm-colorfarà un pizzico, anche se non è raccomandato, in quanto disabilita altri comportamenti importanti (ad esempio 256 colori, BCE, conservazione del contenuto dello schermo alternativo). (Un approccio più pesante è quello di personalizzare il tuo xterm-256color(o xterm) file terminfo sull'host remoto per rimuoverlo cbt.)

Si consiglia di personalizzare l'host remoto (in un modo o nell'altro), quindi le personalizzazioni non si applicano localmente o ad altri host remoti, ma la soluzione più semplice consiste nel modificare un'impostazione delle preferenze del Terminale da utilizzare xterm-colorinvece di xterm-256color:

Terminale> Preferenze> Impostazioni> [profilo]> Avanzate> Dichiara terminale come:

Consiglio di duplicare un profilo di impostazioni esistente, personalizzandolo e utilizzandolo solo quando ci si connette a quegli host remoti.


L'impostazione di xterm-color funziona sicuramente - potresti approfondire come personalizzare il mio file terminfo sull'host remoto?
Farebbe

1
@geerlingguy Modifica di una definizione terminfo esistente . Rimuovere la cbt=\E[Zvoce nel .tifile di origine.
TachyonVortex

Questo mi ha aiutato, ho impostato l'opzione da xterm-256color a xterm e ora posso selezionare, copiare, ecc. Come facevo prima. (Non so come o chi ha cambiato questa opzione). Grazie!
Spacebiker

8

Stavo avendo lo stesso problema. Ho trovato questo thread che raccomandava, tra le altre soluzioni, una variabile d'ambiente sul server remoto:

export TERM=xterm-color

Aggiungendo questo a ~ / .bash_profile ho risolto il problema per me. Questa soluzione è semplice e ha il vantaggio di influenzare solo un utente specifico su un host specifico.


2

Ho avuto lo stesso problema nel programma MobaXTerm. La causa del problema è stata la chiave -K che ho usato per abilitare il tastierino numerico in Nano durante l'uso di PuTTY. Come ho scoperto in MobaXTerm -K non è necessario (il tastierino numerico funziona per impostazione predefinita) e senza di esso i tasti freccia funzionano correttamente e non inseriscono la spazzatura in modo casuale.


1

OSX 10.7.4 con Centos in esecuzione come SO guest

All'interno delle preferenze del terminale OSX, impostazioni, avanzate

Declare terminal as:xterm-color
Strict VT-100 keypad behaviour - TICKED!

Niente più problemi :)


Si noti che la preferenza "Comportamento tastiera VT-100" non è completamente correlata a queste domande e risposte e non ha alcun effetto sul risultato.
Chris Page

1

Per gli utenti di MobaXterm. Se non si utilizza -K e il problema persiste. Assicurati che le seguenti righe siano commentate nel tuo file / etc / nanorc.

# set rebinddelete

# set rebindkeypad


0

Il probabile problema è che, sì, sia la tua macchina locale che il tuo server SONO su sistemi unix che hanno nano, ma quelle versioni nano potrebbero essere diverse.

export TERM=xterm-color

-1

Se quello che ottieni è "Questo è un testo neof" e quello che hai digitato è "Questa è una riga di testo" (devo presumere che il tuo rapporto sia corretto) allora hai un tasto "controllo" traballante qualunque cosa sia su Mac (comando ? Mela?). Perché nano sta usando i tasti control + per "saltare" e hai meno caratteri di quelli digitati, quindi abbiamo a) caratteri che scompaiono b) sequenze di controllo che appaiono dal nulla deducendo che a) diventa b) è logico.

Potresti anche avere un fastidioso programma hotkey / macro / whatnot. Ho il sospetto che questo appartenga al superutente e non al serverfault ma terrò in sospeso forse qualcuno ha una risposta realistica, legata a SSH.


Succede quando uso i tasti freccia per spostarmi avanti e indietro su una linea, più spesso di quando sto semplicemente scrivendo. Ma sembra abbastanza casuale. Proverò rapidamente il suggerimento di Chris per vedere se funziona, ma grazie per aver risposto!
geerlingguy,
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.