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.
fzfBeispiel: 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 | fzfTypische 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 -mNü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