Gibt es eine Möglichkeit, STRG-R zu verwenden, nachdem ein Teil des Befehls in Bash eingegeben wurde?


13

In Bash ist der Befehl Ctrl+ rsehr nützlich. Ich gebe Ctrl+ ein r whateverund durchsucht meinen Verlauf nach Befehlen, die das Wort enthalten whatever. Aber wenn ich tippe whateverund merke, dass ich dieses Wort suchen und Ctrl+ rdrücken möchte, passiert nichts.

Gibt es eine Möglichkeit, eine Taste zu drücken und sie so zu gestalten, als hätte ich Ctrl+ r whateveranstelle von whatever Ctrl+ eingegeben r?

Ich habe folgendes in meinem .inputrc:

"\C-p": history-search-backward

Dies funktioniert jedoch nur, wenn der Zeilenanfang derselbe ist.

Antworten:


12

Sie können den Verlauf von bash anhand der bereits eingegebenen Informationen durchsuchen.

Angenommen, Sie haben gerade getippt curl -I http://superuser.comund vergessen, zuerst Ctrl+ reinzugeben:

$ curl -I http://superuser.com

Wenn Sie eine i-Suche auf Ihrer Geschichte tun mögen, gehen Sie zu Anfang der Zeile zuerst ( Ctrl+ a), geben Sie i-Suche ( Ctrl+ r) und geben Sie Ctrl+ y. Dies sollte mit dem Inhalt des gesamten Textes suchen, den Sie bereits eingegeben haben:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

Alternativ können Sie Ctrl+ wanstelle von Ctrl+ verwenden y, um nur nach dem ersten Wort des gerade eingegebenen Textes zu suchen:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

Alles an einen einzigen Schlüssel binden

Wenn Sie all dies mit einem Tastendruck ausführen möchten, können Sie eine einzelne Taste an ein Tastaturmakro binden. Wenn Sie verwenden möchten, sagen Sie F12:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

Das wird für die Sitzung dauern.

Dauerhaft machen

Definieren Sie einfach das Makro in Ihrem ~/.inputrc:

"\e[24~":"\C-a\C-r\C-y"

Beachten Sie, dass wir hier die einfachen Anführungszeichen weglassen .

Diese Antwort ist möglicherweise hilfreich.


1
Ich bin nicht sicher, ob es ein Problem mit meiner Konfiguration ist, aber nachdem ich tippe, c-rfüge ich c-ydort nichts ein. Wenn ich schreibe c-yselbst fügt einfach den Text, so dass ich nicht die beiden Befehle kombinieren ...
skeept

Gehst du zuerst zum Zeilenanfang? (Ca)
hso

1
Du hast recht, ich war nicht am Anfang der Reihe. Jetzt habe ich in meiner .inputrc "\C-xr": "\C-a\C-r\C-y"und es funktioniert sehr schön! Danke für diese Antwort.
6.

Ich denke, es ist das dritte Mal, dass ich dieses control+a control+r control+yDing gegoogelt habe! Danke, diese Antwort ist immer da! :)
Dr. Beco

2

Sparen Sie vier Schläge:

Vermeiden Sie eine Sekunde, Ctrl-Rindem Sie Folgendes zu Ihrer hinzufügen .bashrc(oder zu Ihrer, .inputrcwenn Sie es vorziehen):

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

Dies wird Karte ALT-R zu CTR-A CTR-R CTR-Y CTR-R

Beschreibung:

  • ALT-R : der Bindungsschlüssel. Eine andere gute Option ist \C-xr( CTR-X CTR-R )
  • STRG-A : Gehe zum Zeilenanfang (merke was geschrieben steht)
  • CTR-R : Startet die Rückwärtssuche
  • CTR-Y : Fügt das ein, was CTR-A als Teil der Suche gespeichert hat
  • CTR-R : Löst die Rückwärtssuche mit den bisherigen Zeichen aus

Mir ist immer noch nicht klar, warum Cy den Befehl in das Suchfeld einfügt (Ca soll kein "Kopier" -Befehl sein, oder?) Und warum Cw nur das erste Wort einfügt.
Marcus

ja, C-abewegt sich nicht nur, sondern speichert (kopiert) den Inhalt, über den verschoben wurde.
Dr. Beco

Ich kann dieses Verhalten nicht bestätigen (versuchen Sie es einfach mit Ca Cy). Ich denke, es ist wahrscheinlicher, dass in Cr einige Sonderfälle eingebaut sind, aber ich weiß nicht, wo sie dokumentiert sind.
Marcus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.