fzf — Interaktiver Fuzzy-Finder für die Kommandozeile

Praxis-Guide zu fzf: interaktiv durch Dateien, History, Prozesse und Git-Branches fuzzy-suchen und auswählen – direkt im Terminal.

fzf ist ein interaktiver Fuzzy-Finder für die Kommandozeile: Du tippst ein paar Zeichen, und fzf filtert in Echtzeit aus beliebigen Listen – Dateien, Befehls-History, Prozessen, Git-Branches und allem, was du hineinpipest. Damit verwandelst du langwierige Tipparbeit in ein paar Tastenanschläge mit Live-Vorschau und Mehrfachauswahl. Beachte, dass fzf Drittsoftware ist und nicht zum Standardumfang gehört – du installierst es separat (etwa über den Paketmanager oder das Git-Repository) und richtest danach die Shell-Integration ein, damit Ctrl+T, Ctrl+R, Alt+C und der **-Trigger funktionieren. Dieser Guide zeigt dir die Aufrufe und Tastaturkürzel, mit denen du fzf im Alltag wirklich nutzt – von der einfachen Suche bis zu Git- und Prozess-Workflows.

Grundlagen

fzf — Startet den Fuzzy-Finder über alle Dateien im aktuellen Verzeichnis (rekursiv).

fzf

<command> | fzf — Pipet eine beliebige Liste in fzf zur interaktiven Auswahl.

ls -la | fzf

fzf --query '<string>' — Startet mit einer voreingestellten Suchanfrage.

fzf --query 'config'

fzf --filter '<string>' — Nicht-interaktiver Filtermodus (für Skripte).

find . -name '*.py' | fzf --filter 'test'

fzf --multi — Aktiviert die Mehrfachauswahl (Tab zum Auswählen, Enter zum Bestätigen).

fzf --multi

fzf --select-1 — Wählt automatisch aus, wenn es nur einen Treffer gibt.

fzf --select-1 --query 'unique-name'

fzf --exit-0 — Beendet sofort, wenn es keine Treffer gibt.

fzf --exit-0 --query 'nonexistent'

Suchsyntax

abc — Fuzzy-Treffer: Einträge, die a, b, c in dieser Reihenfolge enthalten.

'cfg' findet 'config', 'configuration'

'<exact> — Exakter Treffer (mit einfachem Anführungszeichen voranstellen).

'config findet nur Zeilen, die 'config' wörtlich enthalten

^<prefix> — Präfix-Treffer: muss mit der Zeichenkette beginnen.

^src/ findet Zeilen, die mit 'src/' beginnen

<suffix>$ — Suffix-Treffer: muss mit der Zeichenkette enden.

.json$ findet Zeilen, die auf '.json' enden

!<term> — Negativ-Treffer: schließt Zeilen aus, die auf den Begriff passen.

!test schließt Zeilen mit 'test' aus

<term1> | <term2> — ODER-Operator: passt auf einen der beiden Begriffe.

.js$ | .ts$ findet JavaScript- oder TypeScript-Dateien

<term1> <term2> — UND-Operator: passt auf beide Begriffe (durch Leerzeichen getrennt).

src config findet Zeilen, die 'src' und 'config' enthalten

Vorschau & Anzeige

fzf --preview '<command> {}' — Zeigt eine Vorschau des ausgewählten Eintrags.

fzf --preview 'cat {}'

fzf --preview 'bat --color=always {}' — Vorschau mit Syntaxhervorhebung (benötigt bat).

fzf --preview 'bat --color=always --line-range=:100 {}'

fzf --preview-window <position> — Legt die Position der Vorschau fest (up, down, left, right, hidden).

fzf --preview 'cat {}' --preview-window right:60%

fzf --height <percent> — Begrenzt fzf auf einen Teil des Bildschirms (kein Vollbild).

fzf --height 40%

fzf --layout reverse — Zeigt die Ergebnisse von oben nach unten statt von unten nach oben.

fzf --layout reverse --height 40%

fzf --border — Zeichnet einen Rahmen um das fzf-Fenster.

fzf --border rounded --height 40%

Shell-Integration (Ctrl-Kürzel)

Ctrl+T — Findet Dateien per Fuzzy-Suche und fügt die Auswahl in die Befehlszeile ein.

vim [Ctrl+T] → Datei wählen → Enter

Ctrl+R — Durchsucht die Befehls-History der Shell per Fuzzy-Suche.

[Ctrl+R] → Teilbefehl eingeben → Enter zum Ausführen

Alt+C — Findet Verzeichnisse per Fuzzy-Suche und wechselt in die Auswahl (cd).

[Alt+C] → Verzeichnis wählen → Enter

<command> **<Tab> — Löst die Fuzzy-Vervollständigung aus (Dateien, Verzeichnisse, Hosts usw.).

vim **[Tab] Datei per Fuzzy-Suche wählen

cd **<Tab> — Fuzzy-Vervollständigung für Verzeichnisse.

cd **[Tab] Verzeichnis wählen

ssh **<Tab> — Fuzzy-Vervollständigung für Hostnamen aus known_hosts.

ssh **[Tab] Host wählen

Git-Integration

git branch | fzf | xargs git checkout — Wählt interaktiv einen Branch aus und checkt ihn aus.

git branch | fzf | xargs git checkout

git log --oneline | fzf --preview 'git show {1}' — Durchstöbert Commits mit Vorschau.

git log --oneline | fzf --preview 'git show {1}'

git diff --name-only | fzf --preview 'git diff {}' — Durchstöbert geänderte Dateien mit Diff-Vorschau.

git diff --name-only | fzf --multi --preview 'git diff {}'

git stash list | fzf | cut -d: -f1 | xargs git stash pop — Wählt interaktiv einen Stash aus und wendet ihn an (pop).

git stash list | fzf | cut -d: -f1 | xargs git stash pop

Häufige Muster

vim $(fzf) — Findet eine Datei und öffnet sie in vim.

vim $(fzf --preview 'cat {}')

kill -9 $(ps aux | fzf | awk '{print $2}') — Wählt interaktiv einen Prozess aus und beendet ihn.

kill -9 $(ps aux | fzf | awk '{print $2}')

docker stop $(docker ps | fzf | awk '{print $1}') — Wählt interaktiv einen Docker-Container aus und stoppt ihn.

docker stop $(docker ps | fzf | awk '{print $1}')

printenv | fzf — Durchsucht und durchstöbert Umgebungsvariablen.

printenv | fzf

cat <file> | fzf --multi | pbcopy — Wählt Zeilen aus einer Datei aus und kopiert sie in die Zwischenablage.

cat urls.txt | fzf --multi | pbcopy

find . -name '*.json' | fzf --preview 'cat {}' | xargs code — Findet, zeigt eine Vorschau und öffnet eine JSON-Datei in VS Code.

find . -name '*.json' | fzf --preview 'cat {}' | xargs code

Umgebungsvariablen

FZF_DEFAULT_COMMAND='<cmd>' — Legt den Standardbefehl für die Dateiauflistung fest.

export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'

FZF_DEFAULT_OPTS='<opts>' — Legt die Standardoptionen für fzf fest.

export FZF_DEFAULT_OPTS='--height 40% --layout reverse --border'

FZF_CTRL_T_COMMAND='<cmd>' — Passt die Dateisuche für Ctrl+T an.

export FZF_CTRL_T_COMMAND='fd --type f --hidden'

FZF_ALT_C_COMMAND='<cmd>' — Passt die Verzeichnissuche für Alt+C an.

export FZF_ALT_C_COMMAND='fd --type d --hidden'

Fazit

fzf macht das Suchen und Auswählen im Terminal radikal schneller: Du tippst unscharf, siehst sofort die Treffer und kombinierst die Auswahl per Pipe mit jedem anderen Werkzeug – von vim $(fzf) bis zum interaktiven Branch-Wechsel in Git. Da fzf Drittsoftware ist, musst du es einmalig installieren und die Shell-Integration aktivieren; erst danach stehen die Kürzel Ctrl+T, Ctrl+R, Alt+C und der **-Vervollständigungstrigger zur Verfügung, und manche Beispiele setzen weitere Helfer wie fd, bat oder pbcopy voraus. Sei bei Kombinationen wie … | fzf | xargs git checkout oder kill -9 $(…) aufmerksam: fzf liefert nur die Auswahl, die Wirkung kommt vom nachgeschalteten Befehl – prüfe also, was du nach der Auswahl wirklich ausführst.

  • fzf auf GitHub – offizielles Projekt mit Installation, Doku und Beispielen (englisch)
  • fzf-Wiki: Examples – umfangreiche Sammlung praktischer Anwendungsbeispiele (englisch)

Verwandte Kommandos

  • grep – durchsucht Dateiinhalte nach Mustern; gut als Vorfilter vor fzf
  • find – liefert Dateilisten, die du per Pipe an fzf übergibst
  • less – Pager zum Anzeigen der mit fzf ausgewählten Datei