Pourquoi le mode de collage entre crochets est activé sporadiquement dans mon écran de terminal?

23

J'utilise Ubuntu 14.04 et j'ai un problème étrange avec mon écran de terminal qui me dérange beaucoup. Quelqu'un pourrait-il m'aider ou m'expliquer si je fais quelque chose de mal ou de non-Linux? J'ai une sorte de solution mais je veux comprendre pourquoi cela se produit encore et encore.

Je copie souvent les commandes bash de mes notes ou d'Internet et parfois j'obtiens des symboles 0 ~ et 1 ~ étranges qui enveloppent les choses que j'ai copiées. C'est très ennuyeux et cela se produit de manière totalement aléatoire.

Après une longue recherche, j'ai découvert que cette chose s'appelle le mode de collage entre crochets, alors maintenant j'utilise cette commande printf "\e[?2004l"pour réparer mon terminal si ce mode est soudainement activé.

Est-il possible de désactiver cette fonctionnalité de façon permanente d'une manière ou d'une autre? Je l'ai rencontré sur toutes les machines Ubuntu sur lesquelles je travaille maintenant. Auparavant, j'utilisais Ubuntu 10.10 et 12.04 et je n'avais jamais eu un tel problème auparavant.

artemdevel
la source

Réponses:

11

Vous pouvez désactiver le mode de collage entre crochets.

Pour l'essayer temporairement, en bash:

bind 'set enable-bracketed-paste off'

Ensuite, si vous aimez comment cela se comporte, vous pouvez mettre le paramètre dans votre ~/.inputrc, ou à l'échelle du système à /etc/inputrc(ou où qu'il se trouve sur Ubuntu).

jwd
la source
4
Tout ce que cela semble faire pour moi est de faire en sorte que je ne puisse pas taper la lettre "p" (et seulement un minuscule "p"), ou la coller comme du tout, et rien d'autre
Brian dit Reinstate Monica
@BrianLeishman En raison de la façon particulière d'analyser les bindarguments qu'il ne reconnaît pas, c'est ce qui se passera si vous exécutez cette commande en utilisant Readline avant la version 7 ou Bash avant 4.4. Cette réponse ne fera rien d'utile jusqu'à la prochaine version d'Ubuntu (17.04).
Anthony G - justice pour Monica
L' printfapproche fonctionne, mais elle ne fonctionne pas lorsqu'elle est insérée dans my .bashrc, et la fonctionnalité se rallume en quelque sorte périodiquement. L' bindapproche casse mon clavier (la ptouche ne fonctionne pas , and putting that line in my ~ / .inputrc` fonctionne, pendant 10 secondes, puis la console commence à éclater pour -enaset-enaset-...toujours après 10 secondes d'utilisation. problème
Cloud
1
La commande correcte est bind 'set enable-bracketed-paste off'(avec un espace au lieu du premier `` ''. La modification d'un seul caractère ne semble pas possible.
Flèche
7

Vous pouvez mettre cette commande dans votre bashrc. Ensuite, il s'appliquerait à chaque fois que vous ouvrez votre terminal.

Tapez vi ~/.bashrcet ajoutez printf "\e[?2004l"à la fin et enregistrez le fichier avec:wq

MOHRE
la source
Oui, je l'ai fait au début en fait :) plus tard, je viens de désactiver ce mode comme l'a suggéré @jwd.
artemdevel
1
echo 'printf "\e[?2004l"' >> ~/.bashrcfait la même chose sur une seule ligne, et vous pouvez vérifier avec tail -n1 ~/.bashrc. Il n'est pas nécessaire d'utiliser vi.
pzkpfw
6

Pour répondre à votre question initiale de savoir pourquoi cela se produit, voici un scénario possible:

  • Mon ordinateur personnel avait une nouvelle version de zsh qui supportait la pâte entre crochets (appelons-la shell A)
  • J'ai transféré dans un ordinateur avec mon shell défini sur une ancienne version de bash, qui ne prend pas en charge la pâte entre crochets (shell B)

Le problème est que mon programme de terminal pense toujours que la pâte entre crochets est activée lors du passage du shell A au shell B, donc il continue d'ajouter les caractères autour de votre contenu collé (les bits 0 ~ et 1 ~). Shell B ne les prend pas en charge, il les transmet donc inchangés. Vous devez dire à votre terminal de désactiver la pâte entre crochets en faisant imprimer à votre shell une séquence d'échappement spéciale - ce qui printf "\e[?2004l"fait.

Il existe plusieurs façons de résoudre le problème:

  1. Si vous ne vous souciez pas du tout de la pâte entre crochets, désactivez-la sur le shell A afin qu'elle ne soit jamais activée en premier lieu (réponse de @ jwd)

  2. Si vous souhaitez continuer à utiliser la pâte entre crochets sur le shell A, mais désactivez sur le shell B, ajoutez la séquence d'échappement à votre .bashrc(réponse de @ MOHRE)

  3. Mettez à niveau le shell B pour prendre en charge la pâte entre crochets, afin qu'il interprète correctement ces caractères 0 ~ et 1 ~.

Remarque: si vous utilisez l'écran GNU, vous devez exécuter cette printfcommande en dehors de l'écran. Cela ne semble pas fonctionner à l'intérieur.

rjh
la source
Merci @rjh :) Mais je n'ai jamais utilisé zsh ou rencontré de problème avec ssh comme vous l'avez décrit. Il semble que quelque chose ait été mal configuré sur Ubuntu il y a des années.
artemdevel