web-dev-qa-db-fra.com

Control-r reverse-i-search en bash: comment "réinitialiser" la recherche dans Cygwin?

Question: Comment dites-vous Ctrl+r reverse-i-search pour "se réinitialiser" et commencer à chercher à chaque fois depuis le bas de votre historique?

Contexte: Lorsque j'utilise reverse-i-search dans Bash, je suis toujours bloqué une fois qu'il a fini de parcourir l'historique et il ne peut plus trouver de correspondances . Parfois je frappe Esc et ré-invoquer Ctrl+r une deuxième fois, en espérant qu'il commence une nouvelle recherche à partir du bas de mon histoire. Cependant, le "pointeur" semble toujours être à l'endroit qu'il avait laissé dans mon histoire.

Le problème est que je ne veux généralement pas ce comportement. Si je frappe Esc, puis ré-invoquer Ctrl+r, Je voudrais que cela indique qu'il devrait recommencer à partir du bas et remonter.

Mise à jour: Je suppose que j'aurais dû mentionner que j'utilise Cygwin sur Windows, car aucune des solutions mentionnées jusqu'ici ne fonctionne.

Mise à jour: Cette question a été marquée comme question en double potentielle . Cette question n'est pas un doublon pour les raisons suivantes:

  • La question alternative ne concerne pas Cygwin.
  • La question alternative ne traite pas de la façon de réinitialiser la recherche à son état initial (au lieu de cela, il s'agit simplement de revenir en arrière dans la recherche ainsi que vers l'avant).
49
dreftymac

Je n'ai jamais essayé d'en faire la valeur par défaut en appuyant sur Escape, mais bash utilise readline pour l'entrée, qui accepte les raccourcis clavier de style Emacs par défaut, vous pouvez donc aller en bas en utilisant M-> (généralement en combinant Meta/Alt et > ou en suivant la touche Échap avec >).

Si M-> ne fonctionne pas car votre terminal ne vous permet pas d'entrer cela, essayez ^G (Contrôle et G simultanément). C'est le coup "annuler" dans Emacs et fonctionne généralement avec readline aussi.

22
Tom Alsberg

Mon bash fonctionne comme vous l'attendez. Peut-être que taper "ctrl + C" au lieu de "esc" peut aider.

En outre, vous pouvez rechercher en avant en utilisant "ctrl + s"

edit: ctrl + s fonctionne s'il n'envoie pas de "stop" à votre terminal, c'est-à-dire si "stty -a" vous donne "-ixon". Vous pouvez le changer par "stty -ixon". Merci à @Phil pour le rappel.

32
hayalci

Vous avez une réponse confirmée à cette question.

Pour réinitialiser ctrl-r, la touche emacs habituelle ctrl-g peut le faire. Si vous souhaitez inverser ctrl-r d'une étape, au lieu de remonter à partir du bas, vous pouvez utiliser ctrl-s . L'astuce est que ctrl-s est également utilisé pour mettre le terminal en pause. Vous auriez donc besoin d'assigner cela à une autre clé. Par exemple, ce qui suit définira la pause sur ctrl-w (et gardera "reprendre" avec ctrl-q).

$ stty STOP ^w

Alternativement, vous pouvez également désactiver totalement les caractères de contrôle de flux XON/XOFF (reprise/pause) en

$ stty -ixon -ixoff

Cela libérera également les ctrl-s. Pour réactiver la pause/reprise, vous pouvez faire

$ stty ixon ixoff
14
Danke Xie
M-> ... moves to end of history
M-< ... moves to start of history

Votre touche alt gauche est très probablement votre touche Meta.

Man readline pour plus de directives readline.

2
Philip Reynolds