Perché la modalità Incolla bracketing è abilitata sporadicamente nella schermata del mio terminale?

18

Uso Ubuntu 14.04 e ho un problema strano con il mio schermo terminale che mi turba molto. Qualcuno potrebbe aiutarmi o spiegarmi se sto facendo qualcosa di sbagliato o non di linux? Ho una sorta di soluzione, ma voglio capire perché questo accade ancora e ancora.

Spesso copio i comandi di bash dai miei appunti o da Internet e talvolta ottengo strani simboli 0 ~ e 1 ~ che avvolgono le cose che ho copiato. È molto fastidioso e questo accade in modo totalmente casuale.

Dopo una lunga ricerca ho scoperto che questa cosa si chiama modalità di incollatura a incastro così ora uso questo comando printf "\e[?2004l" per correggere il mio terminale se questa modalità è stata abilitata all'improvviso.

È possibile disabilitare questa funzione in modo permanente in qualche modo? L'ho affrontato su tutte le macchine Ubuntu che lavoro ora. Precedentemente ho usato Ubuntu 10.10 e 12.04 e non ho mai avuto questo tipo di problema prima.

    
posta artemdevel 16.08.2015 - 20:26

3 risposte

6

È possibile disabilitare la modalità Incolla tra parentesi.

Provalo temporaneamente, in bash:

bind 'set-enable-bracketed-paste off'

Quindi, se ti piace come si comporta, puoi inserire l'impostazione in ~/.inputrc , o in tutto il sistema in /etc/inputrc (o ovunque sia su Ubuntu).

    
risposta data jwd 24.02.2016 - 19:47
4

Puoi inserire quel comando nella tua bashrc . Quindi si applica ogni volta che apri il tuo terminale.

Digita vi ~/.bashrc e aggiungi printf "\e[?2004l" alla fine e salva il file con :wq

    
risposta data MOHRE 06.05.2017 - 06:31
1

Per rispondere alla tua domanda iniziale di perché questo accade, ecco uno scenario possibile:

  • Il mio computer di casa aveva una nuova versione di zsh che supportava la pasta tra parentesi (chiamiamola shell A)
  • Ho eseguito la ssh in un computer con la mia shell impostata su una versione precedente di bash, che non supporta la pasta con bracketing (shell B)

Il problema è che il mio programma terminale continua a pensare che la funzione bracketing sia abilitata quando si esegue lo sshing dalla shell A alla shell B, quindi continua ad aggiungere i caratteri attorno al contenuto incollato (i bit 0 ~ e 1 ~). Shell B non li supporta quindi li passa semplicemente invariati. Devi dire al tuo terminale di disattivare l'inserimento tra parentesi perché la tua shell stampa una sequenza di escape speciale - che è ciò che printf "\e[?2004l" fa.

Ci sono alcuni modi per risolvere il problema:

  1. Se non ti interessa affatto l'inserimento con bracketing, disattivalo sulla shell A in modo che non sia mai abilitato in primo luogo (risposta di @ jwd)

  2. Se vuoi continuare ad usare la pasta con bracketing sulla shell A, ma disabilita sulla shell B, aggiungi la sequenza di escape al tuo .bashrc (@ risposta di MOHRE)

  3. Esegui l'upgrade della shell B per supportare l'inserimento tra parentesi, quindi interpreta correttamente i caratteri 0 ~ e 1 ~.

Nota a margine: se si utilizza lo schermo GNU, è necessario eseguire quel comando printf al di fuori dello schermo. Non sembra funzionare mentre dentro.

    
risposta data rjh 02.01.2018 - 16:23

Leggi altre domande sui tag