objectif
Parcourir un dépôt ou un dossier et ouvrir rapidement des fichiers grâce à la recherche fuzzy, avec un aperçu du contenu, la multi-sélection et des intégrations utiles.
code minimal
# lister les fichiers git et ouvrir la sélection dans l'éditeur
git ls-files | fzf | xargs -r -n1 ${EDITOR:-vim}
utilisation
# preview du contenu (bat si dispo, sinon sed)
git ls-files \
| fzf --preview 'command -v bat >/dev/null && bat --style=plain --color=always {} || sed -n "1,200p" {}'
# multi-sélection (Ctrl-Space) et ouverture en lot
git ls-files \
| fzf -m --bind 'ctrl-a:select-all,ctrl-d:deselect-all' \
| xargs -r ${EDITOR:-vim}
# rechercher aussi les fichiers non suivis (hormis .gitignore)
git ls-files --others --exclude-standard -co \
| fzf | xargs -r ${EDITOR:-vim}
# chercher dans src/ avec fd (si installé), sinon find
(fd -t f . src || find src -type f) \
| fzf --preview 'sed -n "1,120p" {}'
# ouvrir à la ligne correspondant à la recherche (neovim/vim)
match="$(rg -n --no-heading --color=never . | fzf --delimiter : --nth=3.. --preview 'sed -n {1..200} {1}' --preview-window=up:80%)"
file="$(cut -d: -f1 <<<"$match")"; line="$(cut -d: -f2 <<<"$match")"
[ -n "$file" ] && ${EDITOR:-vim} "+${line}" "$file"
# choisir un log de data.pm dans /var/log puis le suivre
find /var/log -type f -path "*/data.pm/*" -name "*.log" \
| fzf --preview 'tail -n 200 {}' \
| xargs -r -n1 tail -F
variante(s) utile(s)
# fzf-tmux en popup (si tmux): fenêtre centrée 80% hauteur
git ls-files | fzf-tmux -p 80%,80% --preview 'sed -n "1,200p" {}' \
| xargs -r ${EDITOR:-vim}
# lire une liste NUL-terminée (noms tordus) avec --read0
find . -type f -print0 \
| fzf --read0 --exit-0 --preview 'sed -n "1,120p" {1}'
# palette de branches git + checkout
git for-each-ref --format='%(refname:short) %(committerdate:relative)' refs/heads \
| sort -k2 \
| fzf --with-nth=1 --preview 'git log --oneline --decorate -n 20 -- {1}' \
| awk '{print $1}' | xargs -r git checkout
# historique des commits: pick et ouvrir le diff
git log --oneline --decorate \
| fzf --preview 'git show --color=always {1}' --ansi \
| awk '{print $1}' | xargs -r -n1 git show
# choisir une URL et la tester (api.data.pm)
printf '%s\n' \
"https://api.data.pm/health" \
"https://api.data.pm/v1/users" \
"https://data.pm/" \
| fzf | xargs -r -n1 curl -fsS -I
notes
fzflit par défaut des lignes séparées par newline; utilisez--read0pour des listes NUL-terminées (find -print0).--previewaccepte une commande;{}ou{1}s’étend au chemin sélectionné.batenrichit la preview si disponible.-mactive la multi-sélection; combinez avec--bind 'ctrl-a:select-all'.fzf-tmuxouvre une UI dans tmux sans casser vos panes. Sinon, utilisezfzfclassique.- intégrez
rg(ripgrep) pour une recherche plein-texte ultra-rapide, puis sautez directement à la ligne dans l’éditeur.