Perché la modalità incolla parentesi è abilitata sporadicamente nella schermata del mio terminale?


23

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

Copio spesso i comandi bash dai miei appunti o da Internet e talvolta ricevo 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 è chiamata modalità incolla parentesi, quindi ora uso questo comando printf "\e[?2004l"per riparare il mio terminale se questa modalità è stata improvvisamente abilitata.

È possibile disabilitare questa funzione in modo permanente in qualche modo? L'ho affrontato su tutte le macchine Ubuntu che lavoro ora. In precedenza ho usato Ubuntu 10.10 e 12.04 e non avevo mai avuto un simile problema prima.

Risposte:


11

È possibile disabilitare la modalità incolla tra parentesi.

Per provarlo temporaneamente, in bash:

bind 'set enable-bracketed-paste off'

Quindi, se ti piace come si comporta, puoi mettere l'impostazione nel tuo ~/.inputrc, o nell'intero sistema /etc/inputrc(o dovunque sia su Ubuntu).


4
Tutto ciò che sembra fare per me è farlo, quindi non posso digitare la lettera "p" (e solo una minuscola "p"), o incollarlo come niente, e nient'altro
Brian dice Reinstate Monica il

@BrianLeishman A causa del modo particolare in cui bindanalizza gli argomenti che non riconosce, è ciò che accadrà se si esegue questo comando utilizzando Readline prima della versione 7 o Bash prima della 4.4. Questa risposta non farà nulla di utile fino alla prossima versione di Ubuntu (17.04).
Anthony G - giustizia per Monica il

L' printfapproccio funziona, ma non funziona quando viene inserito in my .bashrce la funzione in qualche modo si riaccende periodicamente. L' bindapproccio rompe la mia tastiera (il ptasto non funziona , and putting that line in my ~ / .inputrc` funziona, per 10 secondi, quindi la console inizia a sparire per -enaset-enaset-...sempre dopo 10 secondi di utilizzo. Alla fine ho appena aggiornato manualmente a bash 4.4 dalla fonte per sistemare lo stupido problema
Cloud

1
Il comando corretto è bind 'set enable-bracketed-paste off'(con uno spazio anziché il primo `-``. La modifica di un solo carattere non sembra possibile.
Freccia

7

Puoi mettere quel comando nel tuo bashrc. Quindi si applica ogni volta che apri il tuo terminale.

Basta digitare vi ~/.bashrce aggiungere printf "\e[?2004l"alla fine e salvare il file con:wq


Sì, all'inizio l'ho fatto effettivamente :) poi ho appena disabilitato questa modalità come suggerito da @jwd.
Artemisevel,

1
echo 'printf "\e[?2004l"' >> ~/.bashrcfa la stessa cosa in una riga e puoi verificarlo con tail -n1 ~/.bashrc. Non c'è bisogno di usare vi.
pzkpfw,

6

Per rispondere alla tua domanda originale sul perché ciò accada, ecco un possibile scenario:

  • Il mio computer di casa aveva una nuova versione di zsh che supportava il bracketing (chiamiamolo shell A)
  • Ho installato un computer con la shell impostata su una versione precedente di bash, che non supporta il bracketing (shell B)

Il problema è che il mio programma terminale pensa ancora che il bracketing sia abilitato quando si esegue lo sms 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 fa passare invariati. Devi dire al tuo terminale di disattivare l'incollaggio tra parentesi facendo in modo che la shell stampi una sequenza di escape speciale, che è ciò che printf "\e[?2004l"fa.

Esistono alcuni modi per risolvere il problema:

  1. Se non ti interessa affatto la pasta tra parentesi, disattivala sulla shell A in modo che non sia mai abilitata in primo luogo (@ jwd's answer)

  2. Se vuoi continuare a usare la pasta tra parentesi sulla shell A, ma disabilita sulla shell B, aggiungi la sequenza di escape alla tua .bashrc(risposta di MOHRE)

  3. Aggiorna la shell B per supportare l'incollaggio tra parentesi, quindi interpreta correttamente quei caratteri 0 ~ e 1 ~.

Nota a margine: se si utilizza lo schermo GNU, è necessario eseguire quel printfcomando fuori dallo schermo. Non sembra funzionare all'interno.


Grazie @rjh :) Ma non ho mai usato zsh o ho avuto un problema con ssh come hai descritto. Sembra che qualcosa sia stato appena configurato male su Ubuntu anni fa.
Artemisevel
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.