Besser auf der Konsole mit FZF suchen: Suchverlauf, schnelle Ordnerwechsel, Dateivorschau & mehr!

Als Video ansehen
Bereitgestellt über YouTube

Besser auf der Konsole mit FZF suchen: Suchverlauf, schnelle Ordnerwechsel, Dateivorschau & mehr!

Die Bash-Shell legt uns einen Verlauf der eingegebenen Befehle an. Wenn man einen bereits ausgeführten Befehl erneut ausführen möchte, gibt es standardmäßig zwei Wege: Einmal die Pfeiltasten. Wird die Pfeiltaste nach oben gedrückt, erscheint der zuletzt ausgeführte Befehl. Durch zweimaliges Drücken der vorherige und so weiter. Um die letzte oder vorletzte Anweisung noch mal auszuführen ist das praktisch, für ältere dagegen mühsam.

Hier kann STRG + R helfen: Damit lässt sich der Verlauf durchsuchen. Doch das zeigt uns nur einen exakten Treffer an, keine ähnlichen Ergebnisse. Hier kommt FZF ins Spiel. Der Fuzzy Finder öffnet sich mit STRG + R, wenn das Keybinding aktiviert wurde – dazu später mehr. Statt dem reinen Suchfeld sehen wir nun eine Liste der letzten Befehle:

Daraus kann man mit den Pfeiltasten einen Befehl auswählen und ihn mit der Enter-Taste in die Befehlszeile einfügen. Falls ein anderer gesucht wird, einfach die gewünschten Suchbegriffe eingeben. FZF sucht mit Fuzzy Matching. Das heißt: FZF sucht nicht nur nach exakten Treffern, sondern auch ähnliche. Im folgenden Beispiel haben wir lauter exakte Treffer, bis auf Zeile 71. Das kann manchmal nützlich sein, wenn man sich nicht mehr an den exakten Befehl erinnert oder sich verschrieben hat.

Es gibt ein paar Suchoperatoren, mit denen sich die Ergebnisse verfeinern lassen:

  • Ein Kochkomma am Anfang sucht nur nach exakten Treffern, Fuzzy Matching wird deaktiviert.
  • Ein ^ steht für den Zeilenanfang: ^sudo findet z.B. nur Befehle, die mit sudo beginnen.
  • Das Dollar-Zeichen $ markiert das Zeilenende, um Zeilen zu finden, die mit einer bestimmten Zeichenkette enden: Etwa .sh$ für eine Suche nach Shell-Skripten
  • Platzhalter wie der Stern * sind nicht möglich. Allerdings kann man nach mehreren Begriffen suchen, in dem man diese mit einem Leerzeichen voneinander trennt
  • Negieren ist mit einem Ausrufezeichen ! möglich: apt !php findet z.B. alle apt Befehle, in denen nicht PHP vorkommt.

Die Suche in anderen Programmen verwenden

Es ist auch möglich, FZF in andere Programme einzubinden. Mit ALT + C wird nach einem Ordner im aktuellen Arbeitsverzeichnis gesucht und automatisch per cd in den Ordner gewechselt.

In verschiedenen Befehlen lassen sich zwei Sterne ** als Platzhalter verwenden. Drückt man anschließend die <Tab> Taste, wird FZF getriggert und zeigt passende Suchergebnisse. Im folgenden ein paar Beispiele:

  • vim ** <Tab> sucht im aktuellen Verzeichnis nach Dateien und öffnet die ausgewählte Datei mit dem Texteditor vim. Man kann auch einen anderen Pfad als Basis angeben und ** als Platzhalter einsetzen, etwa vim /etc/** <Tab>.
  • ssh ** <Tab> öffnet eine Liste aller IPs/Hostnamen, mit denen man sich zuletzt per SSH verbunden hat
  • Um einen Prozess sofort zu beenden, ermittelt man normal erst die Prozess-Id mit pgrep <prozess> und beendet diesen mit kill. Wir können nun auch kill -9 <Tab> verwenden und erhalten eine durchsuchbare Liste aller Prozesse
  • Eine per export gesetzt Variable kann per unset ** <Tab> gesucht werden, damit man diese nicht exakt & komplett eingeben muss:

Was kann FZF noch?

Das soeben gezeigte sind eher die Basis-Funktionen, FZF ist noch mächtiger. Ein Beispiel:

fzf --multi --color dark --preview "cat {}" > ausgewaehlte-pfade.txt

–multi erlaubt das Auswählen mehrerer Dateien mit der <Tab> Taste. –color dark aktiviert ein dunkleres Design mit Rahmen und –preview „cat {}“ verwendet cat als Programm, um rechts eine Vorschau zu erzeugen:

Man kann darin mit der <Tab> Taste mehrere Dateien markieren. Wird mit Enter bestätigt, schreibt FZF alle ausgewählten Pfade in die Datei ausgewaehlte-pfade.txt

$ cat ausgewaehlte-pfade.txt
demo.php
test.txt

Man kann FZF stark anpassen und auch in andere Programme wie z.B. den Texteditor vim integrieren. In diesem Beitrag möchte ich es bei den Grundfunktionen belassen, die in meinen Augen für alle auf der Konsole empfehlenswert sind.

Wie installiere ich FZF auf meinem Raspberry Pi oder Linux-System?

Zwar ist FZF in verschiedenen Paketquellen vorhanden. Doch diese Versionen sind meist älter, außerdem kann es dort zu Problemen mit den Tastenkombinationen wie STRG + R kommen. Es empfiehlt sich daher, das GitHub-Repository zu klonen und das enthaltene Installationsskript zu nutzen:

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

Falls du git noch nicht installiert hast (das ist z.B. bei DietPi der Fall), musst du zuvor den Git-Client installieren:

sudo apt install git

Das Installationsskript fragt ab, ob die Auto-Vervollständigung (#1, z.B. für **) und Key-Bindings (2) aktiviert werden sollen. (1) dient für Platzhalter wie **, (2) für die gezeigten Tastenkombinationen (z.B. STRG + R und ALT + C). Ich empfehle beides mit y zu aktivieren.

Unter der Standard-Shell Bash müssen wir die Konfiguration neu laden, um FZF nutzen zu können:

source ~/.bashrc

Alternativ kann man sich auch abmelden und wieder anmelden. Danach sollte beispielsweise die FZF-Suche wie oben gezeigt mit STRG + R funktionieren.

An dieser Stelle möchte man eventuell die Größe des Verlaufes erhöhen. Vor allem HISTFILESIZE umfasst beim Raspberry Pi standardmäßig nur 1.000, d.H. die letzten 1.000 Befehle werden gespeichert. Dies kann man durch Setzen der folgenden Variablen in der ~/.bashrc ändern:

# Anzahl der Befehle, die in einer laufenden SSH-Sitzung im RAM gespeichert werden
# Standard beim Rapsberry Pi OS: 2000
HISTSIZE=5000

# Anzahl der Befehle, die in der .bash_history Datei gespeichert werden
# Standard beim Raspberry Pi OS: 1000
HISTFILESIZE=20000

Leave a Reply