2009-02-14 4 views
43

Frage: Wie sagen Sie Ctrl +r Reverse-i-Suche nach „selbst zurück“ und starten Sie von der Unterseite der Geschichte der Suche jedes Mal?Control-R Reverse-i-Suche in Bash: Wie "Reset" Sie die Suche in Cygwin?

Hintergrund: Wenn ich reverse-i-search in Bash benutze, bleibe ich immer stecken, sobald die Suche im Verlauf abgeschlossen ist und keine weiteren Übereinstimmungen gefunden werden können. Manchmal treffe ich Esc und re-invoke Ctrl + r ein zweites Mal, in der Erwartung, dass es eine neue neue Suche aus dem Grund meiner Geschichte starten. Allerdings scheint der "Zeiger" immer noch an dem vorherigen Ort zu sein, an dem er in meiner Geschichte aufgehört hat.

Das Problem ist, ich möchte dieses Verhalten normalerweise nicht. Wenn ich Esc Esc, und dann wieder aufrufen Ctrl + r, würde ich das gerne, um anzuzeigen, dass es wieder von der Unterseite neu starten und seinen Weg zurück arbeiten sollte.

Update: Ich denke, ich hätte erwähnt, dass ich Cygwin unter Windows verwende, da keine der bisher erwähnten Lösungen funktioniert.

Aktualisierung: Diese Frage wurde als potential duplicate question markiert. Diese Frage ist aus folgenden Gründen kein Duplikat:

  • Die alternative Frage befasst sich nicht mit Cygwin.
  • Die alternative Frage behandelt nicht, wie zurücksetzen die Suche in den Ausgangszustand (stattdessen geht es um einfach rückwärts sowohl in der Suche als auch vorwärts).
+1

In Bezug auf Cygwin: Ich aktualisierte meine Antwort. Ich benutze Cygwin nicht, also kann ich es nicht versuchen, aber^G kann in diesem Fall für dich funktionieren. –

+0

Ja, das scheint so zu sein.^G unmittelbar nach^R – dreftymac

+0

mögliches Duplikat von [Such-Bash-Verlauf ähnlich wie bei CTRL-r nicht weiterleiten lassen] (http://stackoverflow.com/questions/791765/unable-to-forward-search-bash-history-similarly) -as-with-ctrl-r) –

Antwort

18

Ich habe nie versucht, dies ist die Standardeinstellung zu machen, wenn Flucht schlagen, aber bash verwendet readline für die Eingabe, die Emacs-Stil keybindings standardmäßig akzeptiert, so können Sie nach unten gehen M-> (in der Regel entweder durch die Kombination von Meta/Alt und > oder indem Sie der Esc-Taste mit > folgen).

Wenn M-> nicht funktioniert, weil Ihr Terminal dies nicht erlaubt, versuchen Sie ^G (Control und G gleichzeitig). Das ist der "cancel" Strich in Emacs und funktioniert normalerweise auch mit readline.

31

Mein Bash funktioniert so, wie Sie erwarten. Vielleicht kann es hilfreich sein, "Strg + C" anstatt "Esc" zu drücken.

Sie können aber auch die Suche nach vorn mit "Strg + s"

bearbeiten: ctrl + s funktioniert, wenn es nicht ein "Stopp" zu Ihrem Terminal, das heißt nicht senden, wenn "stty -a" gibt Ihnen "-ixon". Du kannst es mit "stty -ixon" ändern. Danke an @Phil für die Erinnerung.

+2

ctrl-s sendet normalerweise einen Halt an Ihr Terminal, wenn Sie das nicht neu konfiguriert haben (stty -a wird Ihnen das geben), wird Ihr Terminal diesen Tastendruck abfangen) –

2
M-> ... moves to end of history 
M-< ... moves to start of history 

Ihre linke Alt-Taste ist höchstwahrscheinlich Ihr Meta-Schlüssel.

Man readline für mehr Readline-Direktiven.

13

Bekomme eine bestätigte Antwort auf diese Frage.

Um ctrl-r zurückzusetzen, kann der übliche emacs key ctrl-g tun. Wenn Sie ctrl-r um einen Schritt zurückdrehen möchten, anstatt sich wieder von unten nach oben zu arbeiten, können Sie ctrl-s verwenden. Der Trick ist ctrl-s wird auch verwendet, um das Terminal zu pausieren. Sie müssten das also einem anderen Schlüssel zuweisen. Im Folgenden wird zum Beispiel pause auf ctrl-w gesetzt (und "resume" mit ctrl-q beibehalten).

$ stty STOP ^w 

Alternativ können Sie auch ganz deaktivieren XON/XOFF (Resume/Pause) Steuerzeichen fließen durch

$ stty -ixon -ixoff 

Dies wird auch frei-up-Abfrage -s. Um wieder zu aktivieren Pause/fortsetzen, können Sie tun

$ stty ixon ixoff