Une commande fuzzy-finder pour Linux : fzf

Au travers de bat, j’ai découvert la commande fzf (Fuzzy Finder). Cette dernière facilite les recherches au sein d’un terminal. Elle offre de nombreuses possibilités en la couplant avec d’autres commandes. Elle permet aussi bien de faire des recherches que de filtrer des résultats ou encore d’afficher des aperçus.

À propos de fzf

Le projet fzf a été créé par Junegunn Choi en 2013. Il est distribué sous licence MIT et vous pouvez trouver le code source sur son repo Github. Il s’agit d’une autre commande écrite en Rust comme exa et bat.

Logo fzf Fuzzy Finder

Pour l’installer, vous trouverez certainement le paquet dans les dépôts de votre distribution.

// Manjaro
sudo pacman -S fzf

// Ubuntu
sudo apt-get install fzf

// Windows, via un gestionnaire de paquet comme Chocolatey
choco install fzf

// Mac
brew install fzf

Vous aurez peut-être une manipulation supplémentaire à faire si vous souhaitez utiliser les raccourcis clavier. Par exemple, sur Manjaro avec Zsh il faudra ajouter une ligne dans .zshrc :

# Keybindings for fzf
source /usr/share/fzf/key-bindings.zsh

Qu’est-ce que permet fzf ?

La commande fzf permet de nombreuses choses, il serait difficile d’être exhaustif. Je vais donc me contenter de vous donner quelques exemples pour vous donner une idée des possibilités.

Filtrer les résultats de find

En utilisant le pipe pour combiner find et fzf, vous pourrez filtrer facilement les résultats de find. Par exemple, si vous recherchez tous les fichiers (récursivement) présent dans le dossier courant, vous allez utiliser find .. Avec fzf, vous pourrez filtrer la sortie très facilement :

find . | fzf

En fait, vous pouvez utiliser fzf directement, vous obtiendrez la même la même puisqu’il s’agit de la commande par défaut. Il est possible d’en définir une autre.

Exemple de recherche fzf

Si vous êtes attentif, lors de la 2e recherche, j’utilise l’option -e. Cette dernière permet de faire une recherche exacte.

Rechercher une commande dans l’historique

En combinant history et fzf, vous pouvez lister l’historique de votre terminal et effectuer une recherche pour retrouver la commande qui vous intéresse.

history | fzf
Exemple : history + fzf

Si vous avez activé les raccourcis clavier, vous pouvez également faire Ctrl + R dans votre terminal ; la recherche démarrera. Quand vous aurez sélectionné une commande, plutôt que de s’afficher en sortie, elle s’affichera directement au niveau du prompt. Ainsi, vous pourrez la réutiliser ou l’éditer facilement.

Éditer un fichier après une recherche fzf

fzf peut s’avérer utile pour éditer rapidement un fichier sans avoir à parcourir l’arborescence. Si vous êtes dans un dossier parent du fichier à éditer (par exemple votre répertoire utilisateur), vous pouvez utiliser :

nano $(fzf)
Exemple nano + fzf

La commande fzf va lister tous les fichiers récursivement. Vous pouvez filtrer la liste en tapant des mots ou des lettres, puis vous pouvez sélectionner le fichier qui vous intéresse. Ce dernier sera aussitôt passé à nano pour l’éditer.

Afficher un aperçu

Par exemple, si vous utilisez bat et que vous souhaitez afficher un aperçu des thèmes pour un fichier donné, il suffit de faire :

bat --list-themes | fzf --preview="bat --theme={} --color=always /chemin/du/fichier"
Aperçu d'un fichier avec bat + fzf

Ici, il s’agit d’un exemple avec bat, mais il est possible d’afficher des aperçus pour d’autres commandes.

Afficher des informations sur un fichier et exécuter une commande

Le wiki d’Archlinux propose cette commande :

pacman -Qq | fzf --multi --preview 'pacman -Qi {1}' | xargs -ro sudo pacman -Rns
Exemple pacman + fzf

Lorsque vous l’exécutez, la liste des paquets installés sur votre machine sera listée avec fzf et un aperçu sera affiché sur le côté avec les informations des paquets. Vous pouvez alors sélectionner un ou plusieurs paquets pour les supprimer.

Et ce ne sont que quelques exemples

Je pense qu’il est difficile de couvrir toutes les possibilités de fzf puisqu’il est possible de le coupler avec un grand nombre de commandes et de l’intégrer dans des scripts bash. Par exemple, voici une autre utilisation que je trouve intéressante : Casey Brant utilise un script pour simuler un bloc-note. En l’exécutant dans son répertoire de notes, il peut éditer n’importe quel fichier et revenir à fzf automatiquement.

Fuz - Fzf
Exemple avec Vim – Source : https://caseybrant.com/2017/10/01/simple-notes-with-fzf.html

Cet exemple utilise Vim, mais le script fonctionne également avec d’autres éditeurs. Il est également possible de remplacer cat par bat pour ajouter des couleurs, les numéros de ligne, etc.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.