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.
la source
bind
arguments 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).printf
approche 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'bind
approche casse mon clavier (lap
touche 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èmebind 'set enable-bracketed-paste off'
(avec un espace au lieu du premier `` ''. La modification d'un seul caractère ne semble pas possible.Vous pouvez mettre cette commande dans votre
bashrc
. Ensuite, il s'appliquerait à chaque fois que vous ouvrez votre terminal.Tapez
vi ~/.bashrc
et ajoutezprintf "\e[?2004l"
à la fin et enregistrez le fichier avec:wq
la source
echo 'printf "\e[?2004l"' >> ~/.bashrc
fait la même chose sur une seule ligne, et vous pouvez vérifier avectail -n1 ~/.bashrc
. Il n'est pas nécessaire d'utiliservi
.Pour répondre à votre question initiale de savoir pourquoi cela se produit, voici un scénario possible:
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:
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)
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)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
printf
commande en dehors de l'écran. Cela ne semble pas fonctionner à l'intérieur.la source