Wie navigiere ich in der Reverse Search von bash?

40

Bash bietet die Funktionalität, die Suche über Ctrl+ umzukehren R. Dann kann man einen Teil eines Befehls eingeben, der einen passenden Eintrag aus dem Verlauf anzeigt.

Angenommen, dies ist meine Geschichte:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

Ich suche nach foo. Wenn Sie erneut auf Ctrl+ drücken R, wird der nächste passende Sucheintrag angezeigt. Oft passiert es mir, dass ich zu schnell bin und über mein beabsichtigtes Ergebnis hinaus navigiere und vim foo3angezeigt wird und ich jetzt zurückkehren möchte vim foo2.

Daher lautet meine Frage: Wie navigiere ich in der Rückwärtssuche?

k0pernikus
quelle
Welches Terminal benutzt du? Z.B. gnome-terminal, konsole, so weiter ...
varesa
1
Nun, ich bin damit nicht allzu vertraut ... Der Schlüssel sollte Strg + S sein, aber einige Terminals scheinen den Schlüssel zu essen, bevor er die Rückwärtssuche erreicht
varesa
STRG +
UMSCHALT
Siehe auch
k0pernikus

Antworten:

36

Sie können über die forward-search-historyFunktion, an die standardmäßig gebunden ist, darauf zugreifen ctrl+s. Leider ctrl+swird xoffstandardmäßig signalisiert, was bedeutet, dass Sie die Suchrichtung nicht ändern können. Es gibt zwei Lösungen, um das Problem zu lösen: Eine deaktiviert das Senden der xoff/xonSignalisierung und die andere ändert die Tastenkombinationforward-search-history

Deaktiviere xon / xoff

Führen Sie stty -ixonIhr Terminal aus oder fügen Sie es Ihrem hinzu ~/.bashrc. Auf diese Weise können Sie ctrl+sdie forward-search-historyVerlaufsfunktion verwenden.

Weitere Informationen zum Kontrollfluss finden Sie unter Wie kann ich nach versehentlichem Drücken der Tastenkombination Strg-S in einem Terminal wieder einfrieren? und einige der Antworten

Ändern Sie die Tastenkombination

Wenn Sie das Standardverhalten von nicht ändern möchten, ctrl+skönnen Sie die Tastenkombination für forward-search-historymit ändern bind. Da die meisten Schlüssel bereits in bash definiert sind, müssen Sie möglicherweise kreativ werden:

bind "\C-t":forward-search-history

Diese binden ctrl+tweiterleiten-search-Geschichte, aber bitte beachten Sie , dass standardmäßig ctrl+tläufttranspose-chars

Ulrich Dangel
quelle
Ich habe versucht , die erste Lösung stty -ixonin zshund es funktioniert sehr gut. Gibt es jedoch möglicherweise unerwünschte Nebenwirkungen bei der Deaktivierung der xoff/xonSignalisierung?
Schüler
@student Sie können nicht mehr ctrl+szum Anhalten der Terminalausgabe verwenden. Wenn Sie es noch nie benutzt haben, ist dies kein Problem
Ulrich Dangel
1
Für das, was es wert ist, habe ich mich für die zweite Lösung entschieden. Tolles Zeug ! Ich wusste nie, dass Sie die Konsole einfrieren können, indem Sie auf drücken C-s. Sehr nützlich, wenn Sie tail für Server-Protokolle verwenden. Ordentlich ! (Ich wünschte, ich hätte noch eine Gegenstimme :))
Ashutosh Jindal
Ich habe Option 2 nicht für OSX bekommen. Ich musste dies stattdessen tun:bind '"\C-t": history-search-forward'
stiemannkj1
0

Als Alternative zur grundlegenden Rückwärtssuche und Vorwärtssuche, die von Ihrer Bash bereitgestellt werden, möchten Sie möglicherweise Folgendes untersuchen:

fzf , ein selbst beschriebener "Kommandozeilen-Fuzzy-Finder".

Es kann die Standard-Rückwärtssuche Ihrer Bash (und anderer Terminals) ersetzen.

Seine Vorteile sind, dass es:

  • druckt eine Liste Ihrer Befehle aus dem Verlauf
    • Schaltet zwischen chronologischer und relevanter Sortierung um, indem Sie erneut Strg + R drücken
  • kann über die Pfeiltasten (oder Strg + J / Strg + K) navigiert werden
  • ermöglicht die Suche nach mehreren Nadeln

Mein Workflow basiert nun vollständig auf der FZF über die grundlegende Rückwärtssuche auf Maschinen, über die ich die Kontrolle habe.

k0pernikus
quelle