Pourquoi CTRL-r agit bizarrement (ne montrant qu'une partie d'une commande) sur OS X

10

Ctrl+ rest un excellent petit outil pour rechercher vos .bash_historycommandes précédemment exécutées.

Cependant, lorsque je l'utilise dans mon OS X Terminal.app, je vois un comportement étrange et je me demandais si quelqu'un d'autre voyait la même chose ou savait comment le réparer.

  1. Ctrl+r
  2. tapez quelque chose comme find
  3. oh cool, regarde ... c'est la commande que je voulais find . -exec grep -q "hello world" '{}' \; -print
  4. Je veux exécuter cette commande mais changer le monde bonjour en quelque chose d'autre.
  5. Alors j'ai frappé ou
  6. Maintenant, la commande est SORTA sur la ligne de commande, mais elle ressemble toujours à une version tronquée de la commande, comme ceci:, -q "blog_posts_by" '{}' \; -printoù la commande entière est là, et je peux utiliser les touches de curseur pour se déplacer sur la ligne, mais pas tout il est imprimé. Il y a un décalage entre ce qui est affiché sur la ligne et ce que le terminal pense réellement que je modifie.

Quelqu'un sait-il pourquoi cela pourrait se produire? Ce n'est pas un phénomène facile de rechercher sur le Web.

Bryan Kennedy
la source
Est-ce que cela se produit uniquement sur des lignes plus longues que la largeur de la fenêtre de votre terme?
Essobi
Quelle version de Terminal.App/OSX utilisez-vous BTW? Version bash? Pouvez-vous également nous montrer votre .bashrc?
Essobi

Réponses:

14

Vous avez probablement des séquences d'échappement pour les couleurs dans votre invite qui ne sont pas correctement délimitées. Ils doivent être enfermés dans \[et \].

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ `

La longueur des séquences de caractères non imprimables n'est pas incluse dans la longueur de l'invite lorsqu'elles sont ainsi fermées et la position des commandes précédentes doit être calculée pour un affichage correct lors de leur enroulement.

En pause jusqu'à nouvel ordre.
la source
OK, j'ai eu quelques problèmes supplémentaires, qui ont été résolus par le répondeur sur ce fil StackOverflow - stackoverflow.com/questions/35563/…
bryan kennedy
Cela s'applique également aux sauts de ligne dans l'invite. J'ai eu une séquence de contrôle hicolor supprimée parce qu'elle était au début de PS1, mais pas à nouveau après le caractère de nouvelle ligne à l'intérieur.
Walf
0

Cela pourrait être dû à la façon dont les touches d'échappement sont configurées sur votre terminal, ce que je fais normalement, c'est utiliser la flèche gauche ou droite sur iTerm ou Terminal.app car je ne suis pas un fan de frapper retour immédiatement, cela fonctionne-t-il pour vous ?

lynxman
la source
0

Une autre cause possible de ce problème est la mauvaise TERMvaleur. Par exemple, cela m'est arrivé lorsque j'utilisais des couleurs dans ma PS1, mais mon TERMétait réglé sur xterm. Je l'ai changé en xterm-256colorpuis CTRL-r a recommencé à fonctionner correctement.

Tony
la source