fzf
fzf (für fuzzy finder) ist ein Kommandozeilenprogramm, das Text von der Standardeingabe entgegennimmt und es erlaubt fehlertolerant in den Zeilen des Texts zu suchen. Der Titel „unscharf suchen“ ist die Übersetzung des gängigsten englischen Namens solcher Suchen (fuzzy search).
Wem das zu nichtssagend ist, dem empfehle ich das Programm einfach im Terminal zu starten, vorzugsweise in einem Verzeichnis mit nicht allzu vielen Dateien:
Code: Alles auswählen
$ cd ~/.config
$ fzf
Code: Alles auswählen
evolution/sources/eb6df6122a988ba4304b9d644fb22643472..
evolution/sources/293694be3258aa8c34f0266a461c08c4ab4..
evolution/sources/c9538b814547517bbeb8fdde6091d7b0a43..
evolution/sources/local.source
evolution/sources/vfolder.source
evolution/sources/system-proxy.source
> dconf/user
380/380 ───────────────────────────────────────────────
>
Suche ich zum Beispiel nach den Dateien, die ich für das 7. Türchen erstellt und bearbeitet habe, und kann mich nur noch vage an irgendwas mit „pi“ und „rir“ (pipewire und hrir) erinnern, habe ich die gewünschte Datei auf Anhieb
Code: Alles auswählen
pipewire/test/sink-virtual-surround-7.1-hesuvi.conf.old
pipewire/test/sink-virtual-surround-5.1-kemar.conf
pipewire/pipewire.conf.test/virtual-surround.conf
pipewire/pipewire.conf.d/virtual-surround.conf
pipewire/pipewire.conf.notworking
pipewire/pipewire.conf.mine
> pipewire/hrir.wav
17/380 ────────────────────────────────────────────────
> pirir
Um diesem Beispiel noch ein Mindestmaß an Nutzen abzuringen, könnten wir dasselbe noch einmal mit diesem Aufruf machen, um uns den Dateityp der gesuchten Datei anzeigen zu lassen, im Falle der »hrir.wav« vom 7. Dezember
Code: Alles auswählen
$ file "$(fzf)"
pipewire/hrir.wav: RIFF (little-endian) data, WAVE audio, IEEE Float, 14 channels 48000 Hz
Es gibt noch viele weitere Optionen, für die Anzeige nur einer von mehreren Spalten, eine Vorschau des gerade gewählten Elements, u. s. w. aber da verweise ich auf die Manpage.
Jedenfalls lassen sich mit fzf einige spannende und nützliche Dinge anstellen.
Anwendungen von fzf
automatische Vervollständigung in der shell
Im Paket fzf befinden sich bereits Dateien für die automatische Vervollständigung für bash, zsh, fish und vim und was es für die bash gibt, will ich kurz vorstellen.
Zuerst einmal müssen die Dateien in der Shell gesourct werden. Ab bookworm sollte das wohl eigentlich automatisch passieren, das tut es bei mir aber nicht und bis inklusive bullseye muss man die Dateien sowieso erst selbst laden. Das geschieht mit
Code: Alles auswählen
$ source /usr/share/doc/fzf/examples/completion.bash ## bis inklusive bullseye
$ source /usr/share/bash-completion/completions/fzf ## ab bookworm
Code: Alles auswählen
$ source /usr/share/doc/fzf/examples/key-bindings.bash
Wie gewohnt kann man das natürlich auch alles in der »~/.bashrc« erledigen, damit die fzf-Funktionen in der bash immer zur Verfügung stehen.
Die Vervollständigung spricht dann auf ** an. So kann man bei der Eingabe von
Code: Alles auswählen
cp **<Tab>
Daneben gibt es auch noch ein anderes Projekt [1], das auch die „normale“ Vervollständigung (mit einem einfachen Tabulator ohne vorher ein ** eingegeben zu haben) für verschiedene Shells, unter anderem natürlich wieder auch der bash, zur Verfügung stellt. Entgegen der Installationsanleitung des Projekts, habe ich allerdings nur das gewünschte Skript heruntergeladen und gesourcet
Code: Alles auswählen
$ wget -O ~/.fzf_bash_completion.sh "https://github.com/lincheney/fzf-tab-completion/raw/master/bash/fzf-bash-completion.sh"
$ source ~/.fzf_bash_completion.sh
$ bind -x '"\t": fzf_bash_completion'
Um es permanent einzurichten, genügt es wieder die beiden letzten Befehle an die »~/.bashrc« anzuhängen.
als Menü
Besonders spannend finde ich die Möglichkeit fzf in einem vorzugsweise kleinen Terminalfenster als eine Art Menü zu verwenden und das natürlich besonders in Kombination mit einem schlanken Fenstermanager, weil sich da die Bedienung mit der Tastatur und wahlweise auch Maus besonders gut machen.
(unter sway verwende ich dafür das Terminal kitty mit einigen eigenen Einstellungen bezüglich Aussehen und Verhalten der Fenster)
Ein recht simples Beispiel, wieder für die bash, das man recht gut als minimalistisches Startmenü nutzen kann, ist
Code: Alles auswählen
compgen -c | fzf | sh
Als Beispiel für ein ausgefeilteres Skript als Startmenü will ich sway-launcher-desktop [2] nennen, das sich entgegen dem Namen nicht nur unter sway nutzen lässt.
Im Netz findet man darüber hinaus noch unzählige weitere Anwendungsmöglichkeiten, zum Teil von zweifelhaftem Nutzen
aber eine aus meiner Feder, die ich so noch nicht im Netz gefunden habe, will ich morgen im zweiten Teil vorstellen.https://www.reddit.com/r/archlinux/comments/bg53as/cool_uses_for_dmenurofifzf/ hat geschrieben: I have it set to open a random porno from a set directory with a keyword.
[1] https://github.com/lincheney/fzf-tab-completion
[2] https://github.com/Biont/sway-launcher-desktop