FZF unter Linux: schneller Einstieg und praxistaugliche Einzeiler

Was ist fzf?

fzf ist ein schneller, interaktiver Fuzzy-Finder für die Shell. Er filtert beliebige Listen (Dateien, Befehle, Prozesse …) per Texteingabe und gibt die Auswahl über stdout zurück.

Schnellstart

Ohne Pipeline liest fzf eine Dateiliste (gesteuert durch FZF_DEFAULT_COMMAND) und öffnet eine interaktive Ansicht.

fzf

Beispiel: Eingabe „auf“ filtert Zeilen, Enter gibt die Auswahl aus:

aufgabe.txt

Eigene Eingabeliste per Pipe

printf '%s\n' datei1.txt aufgabe.txt notizen.md kaufen.txt | fzf

Typische Einzeiler

  • Dateien im Projekt durchsuchen:

    find . -type f | fzf
  • In Verzeichnisse springen (als Funktion, damit cd im aktuellen Shell-Prozess wirkt):

    cdf() { dir="$(find . -type d -maxdepth 3 | fzf)" && [ -n "$dir" ] && cd "$dir"; }
  • Datei im Editor öffnen:

    file="$(find . -type f | fzf)" && [ -n "$file" ] && "${EDITOR:-vi}" "$file"
  • ripgrep-Ergebnisse filtern und Datei+Zeile im Editor öffnen:

    rg -n --no-heading --hidden --glob '!.git' PATTERN \
    | fzf \
    | awk -F: '{print "+"$2" "$1}' \
    | xargs -r sh -c '"${EDITOR:-vim}" "$@"' sh
  • Prozesse auswählen und beenden:

    ps aux | fzf | awk '{print $2}' | xargs -r kill

History & Befehle: superpraktisch

  • Interaktive History-Suche (einfach):

    history | fzf
  • Bash: nur den Befehlsteil auswählen (ohne Nummer) und ausgeben:

    history | fzf | sed 's/ *[0-9]\+ *//' 
  • Optional (mit Vorsicht): direkt ausführen Hinweis: eval führt im aktuellen Shell-Kontext aus – nur nutzen, wenn du der Quelle vertraust.

    cmd="$(history | fzf | sed 's/ *[0-9]\+ *//')" && [ -n "$cmd" ] && eval "$cmd"
  • Komfortabler: fzf-Keybindings installieren und Strg-R nutzen

    • Bash/Zsh: liefert eine fzf-gestützte History-Suche ohne eigene Einzeiler.
    • Installation (Beispiel Homebrew):
      $(brew --prefix)/opt/fzf/install

Multiselect

Tab für Mehrfachauswahl, Enter bestätigt. Jede Zeile separat auf stdout.

printf '%s\n' alpha beta gamma | fzf -m

Nützliche Optionen

  • Vorschau (ersten 20 Zeilen):

    find . -type f | fzf --preview 'head -n 20 {}'
  • Höhe/Rand:

    find . -type f | fzf --height 40% --border
  • Exakte Matches:

    find . -type f | fzf -e
  • Case-Handling (ignore-case):

    find . -type f | fzf -i
  • NUL-separierte Eingaben/Ausgaben:

    cmd_produziert_nuls | fzf --read0 --print0

Installation

  • Debian/Ubuntu:
    sudo apt-get update && sudo apt-get install -y fzf
  • Fedora:
    sudo dnf install -y fzf
  • Arch:
    sudo pacman -S fzf
  • macOS (Homebrew):
    brew install fzf

Hinweise

  • Ohne stdin bestimmt FZF_DEFAULT_COMMAND die Startliste (z. B. git ls-files in Repos oder find).
  • ESC/Ctrl-C bricht ab (kein Output).
  • Leerzeichen im Query trennen Sub-Patterns („auf txt“ = beides muss matchen).
  • Für History/Editor-Workflows sind fzf-Keybindings (Ctrl-T, Ctrl-R, Alt-C) sehr hilfreich.

Tags

linuxfzfcliterminalshellbashproductivityworkflowfuzzysearchhistory

Linux-Blog-Overview