12 votes

Pourquoi la touche CTRL-r se comporte-t-elle bizarrement (elle n'affiche qu'une partie de la commande) sous OS X ?

Ctrl + r est un excellent petit outil pour rechercher votre .bash_history pour les commandes exécutées précédemment.

Cependant, lorsque je l'utilise dans mon Terminal.app OS X, je constate un comportement bizarre, et je me demandais si quelqu'un d'autre voyait la même chose ou savait comment y remédier.

  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 hello world en quelque chose d'autre.
  5. Alors j'ai frappé o
  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" '{}' \; -print Je peux utiliser les touches du curseur pour me déplacer sur la ligne, mais la commande n'est pas entièrement imprimée. Il y a une déconnexion entre ce qui est affiché sur la ligne et ce que le terminal pense réellement que je suis en train d'éditer.

Quelqu'un a-t-il une idée de la raison pour laquelle cela peut se produire ? Ce n'est pas un phénomène facile à rechercher sur le web.

0 votes

Cela ne se produit-il que sur des lignes plus longues que la largeur de votre fenêtre de terme ?

0 votes

Quelle version de Terminal.App/OSX utilisez-vous ? Version de Bash ? Pouvez-vous nous montrer votre .bashrc également ?

14voto

jason saldo Points 5036

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

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

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

0 votes

OK, j'ai rencontré d'autres problèmes, qui ont été résolus par la personne qui a répondu à ce fil de discussion StackOverflow. stackoverflow.com/questions/35563/

0 votes

Cela s'applique aux nouvelles lignes sur l'invite, aussi. J'ai eu une séquence de contrôle hicolore abandonnée parce qu'elle était au début de PS1 mais pas après le caractère de nouvelle ligne.

0voto

lynxman Points 8999

Cela peut être dû à la façon dont les touches d'échappement sont configurées dans votre terminal. Ce que je fais normalement, c'est utiliser la flèche gauche ou droite dans iTerm ou Terminal.app, car je ne suis pas fan de la touche retour immédiate.

0voto

Tony Points 101

Une autre cause possible de ce problème est le fait d'avoir le mauvais TERM valeur. Par exemple, cela m'est arrivé lorsque j'utilisais des couleurs dans ma PS1, mais mon TERM a été fixé à xterm . Je l'ai changé en xterm-256color et ensuite CTRL-r a recommencé à fonctionner correctement.

0voto

astax Points 101

Et pour ceux qui trouvent cette question dans Google - dans les systèmes MacOS modernes, lorsque l'on utilise zsh la séquence d'échappement n'est pas \[...\] pero %{...%}

L'invite correcte pour l'OP serait la suivante :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X