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.