web-dev-qa-db-fra.com

Pourquoi le mode de collage entre crochets est activé sporadiquement sur l'écran de mon terminal?

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

Je copie souvent des commandes bash à partir de mes notes ou d’Internet et j’obtiens parfois des symboles étranges 0 ~ et 1 ~ qui englobent des éléments que j’ai copiés. C'est très énervant et cela se fait de manière totalement aléatoire.

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

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

22
artemdevel

Vous pouvez désactiver le mode coller entre crochets.

Pour l'essayer temporairement, en bash:

bind 'set enable-bracketed-paste off'

Ensuite, si vous aimez la façon dont cela se comporte, vous pouvez définir le paramètre dans votre ~/.inputrc ou à l’échelle du système à /etc/inputrc (ou à l’endroit où il se trouve sur Ubuntu).

10
jwd

Vous pouvez mettre cette commande dans votre bashrc. Cela s’appliquerait à chaque fois que vous ouvrez votre terminal.

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

6
MOHRE

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

  • Mon ordinateur à la maison a une nouvelle version de zsh qui prend en charge la pâte entre crochets (appelons-le Shell A)
  • J'ai installé sur un ordinateur avec 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, c'est que mon programme de terminal pense toujours que la pâte entre crochets est activée lors du transfert de Shell A à Shell B. Elle continue donc à ajouter les caractères autour du contenu collé (les bits 0 ~ et 1 ~). Shell B ne les prend pas en charge, il ne les modifie donc pas. Vous devez dire à votre terminal de désactiver la pâte entre crochets en demandant à votre shell d’imprimer une séquence d’échappement spéciale - ce que fait printf "\e[?2004l".

Il y a 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 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ésactiver sur le shell B, ajoutez la séquence d'échappement à votre .bashrc (la réponse de @ MOHRE).

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

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

5
rjh