Réponse courte : Exécutez la commande printf '\e[?2004l'
. Cela envoie une séquence d'échappement au terminal qui lui demande d'arrêter d'envoyer des séquences de collage entre crochets.
Autres options : Dans Terminal.app, vous pouvez également le réinitialiser avec Command - Option - R (ou menu Shell > Réinitialiser). Dans iTerm2.app, c'est Command - R ou le menu Session > Réinitialiser. Dans l'une ou l'autre des applications, cette opération réinitialise également un certain nombre d'autres modes étranges dans lesquels il peut se mettre, ce qui peut être pratique.
Vous pouvez également éliminer le problème en passage de votre shell interactif à zsh ou l'installation d'un une nouvelle version de bash (au moins v5.1) et de passer à cela. Ceux-ci utilisent et comprennent les collages entre parenthèses, et le réinitialisent également avant chaque commande, de sorte qu'il ne peut pas rester bloqué (du moins, après la commande en cours).
Longue réponse : Les "collages entre crochets" sont une fonctionnalité qui permet au terminal de notifier les différents programmes en cours d'exécution. sur le terminal lorsque des données sont collées (au lieu d'être saisies normalement). En fait, il envoie des séquences d'échappement spéciales "début du collage" et "fin du collage" ( \e[200~
et \e[201~
respectivement, où \e
représente un caractère d'échappement ASCII). C'est pour que, par exemple, le programme puisse traiter un document multiligne collé comme un seul élément plutôt que de voir chaque ligne comme un élément séparé. J'ai aussi quelques scripts qui l'utilisent pour pouvoir accepter un élément glissé-déposé sans que je doive passer à la fenêtre du terminal et appuyer sur retour pour indiquer que l'élément est complet.
En général, lorsqu'un programme comprend ces séquences et souhaite les recevoir, il envoie une autre séquence d'échappement au terminal ( \e[?2004h
) pour lui dire de commencer à les envoyer. Il devrait envoyer une autre séquence pour les éteindre ( \e[?2004l
) lorsqu'il se termine, mais s'il ne le fait pas, il est déconnecté sans se terminer proprement, ou un autre programme s'exécute à l'intérieur, ou... alors vous obtenez ces séquences envoyées à un programme qui n'a aucune idée de ce qu'elles sont, et les interprète simplement comme du charabia.
zsh et bash v5.1+ utilisent eux-mêmes le mode de collage entre crochets, et donc 1) ne sont pas perturbés par les séquences d'échappement, et 2) envoient la séquence pour désactiver le collage entre crochets à chaque fois que vous lancez un autre programme (/command) et la séquence pour le réactiver après la sortie de chaque programme, de sorte qu'il est constamment remis dans le bon état.
(La situation avec bash est un peu plus compliquée. MacOS n'inclut que la version 3.2.57 de bash par défaut. La prise en charge du collage entre crochets a été ajoutée dans la v4.4 (avec readline 7.0), mais semble être désactivée par défaut jusqu'à la v5.1. Donc, si vous installez bash v5.1 ou plus, et que vous l'utilisez comme interpréteur de commandes interactif, vous ne devriez pas avoir de problème avec ceci).
3 votes
Une chose qui peut aider à résoudre ce problème s'il ne se produit qu'occasionnellement est de taper
reset
dans votre terminal - des programmes utilisant des fonctions plus avancées du terminal, incluant généralement des fonctions telles quetmux
yvim
Il se peut que vous n'ayez pas l'occasion de réinitialiser la fonction bash.enable-bracketed-paste
discuté ci-dessous.0 votes
Un point de données : Cela m'arrive aussi, mais seulement dans une fenêtre de Terminal où je me suis connecté en ssh à une autre machine, et pour une raison quelconque, quelque chose sur cette machine (d'après la réponse ci-dessous, je suppose qu'il s'agit de bash) envoie la séquence pour activer cette fonctionnalité. Cette machine désactive également la fonction lorsque je quitte - mais pas lorsque j'utilise ~^Z pour suspendre la session ssh. Si j'utilise ~^Z pour suspendre la session ssh, la fonctionnalité reste activée, et les programmes sur ma machine locale ne la comprennent pas, et j'ai le même problème.
0 votes
@SteveSummit Je suis d'accord, c'est exactement la même expérience. C'est essentiellement une question de conception (activé et désactivé à des points raisonnables "définis"). Donc toute chose inattendue casse le modèle (déconnexion ssh, ~^Z, etc.).