Besonderer Dank geht an:
Warp ist ein modernes, Rust-basiertes Terminal mit integrierter KI, damit Sie und Ihr Team schneller großartige Software erstellen können.
Besuchen Sie warp.dev, um mehr zu erfahren.
fzf ist ein universeller Befehlszeilen-Fuzzy-Finder.
Es ist ein interaktives Filterprogramm für jede Art von Liste; Dateien, Befehlsverlauf, Prozesse, Hostnamen, Lesezeichen, Git-Commits usw. Es implementiert einen „Fuzzy“-Matching-Algorithmus, sodass Sie Muster mit ausgelassenen Zeichen schnell eingeben können und trotzdem die gewünschten Ergebnisse erhalten.
Portabel – Zur einfachen Installation als einzelne Binärdatei verteilt
Blitzschnell – Hochoptimierter Code verarbeitet sofort Millionen von Elementen
Extrem vielseitig – Vollständig anpassbar über einen Event-Action-Bindungsmechanismus
Batterien im Lieferumfang enthalten – Beinhaltet die Integration mit Bash, ZSH, Fish, Vim und Neovim
Ich möchte allen Sponsoren dieses Projekts danken, die es mir ermöglichen, fzf weiter zu verbessern.
Wenn Sie dieses Projekt sponsern möchten, besuchen Sie bitte https://github.com/sponsors/junegunn.
Installation
Homebrew verwenden
Linux-Pakete
Windows-Pakete
Mit Git
Binäre Veröffentlichungen
Shell-Integration einrichten
Vim/Neovim-Plugin
Upgrade von fzf
Gebäude fzf
Verwendung
--height
Modus
--tmux
Modus
Verwendung des Finders
Anzeigemodi
Suchsyntax
Umgebungsvariablen
Optionen
Demo
Beispiele
Tastenkombinationen für die Befehlszeile
Fuzzy-Vervollständigung für Bash und ZSH
Dateien und Verzeichnisse
Prozess-IDs
Hostnamen
Umgebungsvariablen / Aliase
Einstellungen
Unterstützte Befehle
Benutzerdefinierte Fuzzy-Vervollständigung
Vim-Plugin
Fortgeschrittene Themen
1. Aktualisieren Sie die Liste der Prozesse, indem Sie STRG-R drücken
2. Wechseln Sie zwischen den Quellen, indem Sie STRG-D oder STRG-F drücken
3. Interaktive Ripgrep-Integration
Leistung
Ausführen externer Programme
Sich in einen anderen Prozess verwandeln
Neuladen der Kandidatenliste
Vorschaufenster
Vorschau eines Bildes
Tipps
Respekt vor .gitignore
Fischschale
fzf-Themenspielplatz
Verwandte Projekte
Lizenz
Sie können Homebrew (unter macOS oder Linux) verwenden, um fzf zu installieren.
brew install fzf
Wichtig
Informationen zum Einrichten der Shell-Integration (Tastenzuordnungen und Fuzzy-Vervollständigung) finden Sie in den folgenden Anweisungen.
fzf ist auch über MacPorts verfügbar: sudo port install fzf
Paketmanager | Linux-Distribution | Befehl |
---|---|---|
APK | Alpine Linux | sudo apk add fzf |
GEEIGNET | Debian 9+/Ubuntu 19.10+ | sudo apt install fzf |
Conda | conda install -c conda-forge fzf | |
DNF | Fedora | sudo dnf install fzf |
Nix | NixOS usw. | nix-env -iA nixpkgs.fzf |
Pacman | Arch Linux | sudo pacman -S fzf |
Pkg | FreeBSD | pkg install fzf |
Packung | NetBSD | pkgin install fzf |
pkg_add | OpenBSD | pkg_add fzf |
Portage | Gentoo | emerge --ask app-shells/fzf |
Spack | spack install fzf | |
XBPS | Leeres Linux | sudo xbps-install -S fzf |
Zypper | openSUSE | sudo zypper install fzf |
Wichtig
Informationen zum Einrichten der Shell-Integration (Tastenzuordnungen und Fuzzy-Vervollständigung) finden Sie in den folgenden Anweisungen.
Unter Windows ist fzf über Chocolatey, Scoop, Winget und MSYS2 verfügbar:
Paketmanager | Befehl |
---|---|
Schokoladend | choco install fzf |
Scoop | scoop install fzf |
Winget | winget install fzf |
MSYS2 (Pacman) | pacman -S $MINGW_PACKAGE_PREFIX-fzf |
Alternativ können Sie dieses Repository in ein beliebiges Verzeichnis „git clone“ und das Installationsskript ausführen.
git clone -- Depth 1 https://github.com/junegunn/fzf.git ~/.fzf~/.fzf/install
Das Installationsskript fügt Ihrer Shell-Konfigurationsdatei Zeilen hinzu, um $PATH
zu ändern und die Shell-Integration einzurichten.
Sie können die offiziellen fzf-Binärdateien von der Veröffentlichungsseite herunterladen.
https://github.com/junegunn/fzf/releases
Fügen Sie die folgende Zeile zu Ihrer Shell-Konfigurationsdatei hinzu.
bash
# fzf-Tastenbelegung und Fuzzy-Completioneval „$(fzf --bash)“ einrichten
zsh
# FZF-Tastenbelegung und Fuzzy-Vervollständigungsquelle einrichten <(fzf --zsh)
Fisch
# fzf-Tastenkombinationen einrichtenfzf --fish | Quelle
Notiz
Die Optionen --bash
, --zsh
und --fish
sind nur in fzf 0.48.0 oder höher verfügbar. Wenn Sie eine ältere Version von fzf haben oder eine genauere Kontrolle wünschen, können Sie einzelne Skriptdateien im Verzeichnis /shell ablegen. Der Speicherort der Dateien kann je nach verwendetem Paketmanager variieren. Weitere Informationen finden Sie in der Paketdokumentation. (z. B. apt show fzf
)
Tipp
Sie können die STRG-T- oder ALT-C-Bindung deaktivieren, indem Sie FZF_CTRL_T_COMMAND
oder FZF_ALT_C_COMMAND
bei der Beschaffung des Skripts auf eine leere Zeichenfolge setzen. So deaktivieren Sie beispielsweise die ALT-C-Bindung:
bash: FZF_ALT_C_COMMAND= eval "$(fzf --bash)"
zsh: FZF_ALT_C_COMMAND= source <(fzf --zsh)
Fisch: fzf --fish | FZF_ALT_C_COMMAND= source
Das Festlegen der Variablen nach der Bereitstellung des Skripts hat keine Auswirkung.
Wenn Sie vim-plug verwenden, fügen Sie Folgendes zu Ihrer Vim-Konfigurationsdatei hinzu:
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim'
junegunn/fzf
stellt die grundlegenden Bibliotheksfunktionen bereit
fzf#install()
stellt sicher, dass Sie über die neueste Binärdatei verfügen
junegunn/fzf.vim
ist ein separates Projekt, das eine Vielzahl nützlicher Befehle bereitstellt
Weitere Informationen zur Vim-Integration finden Sie unter README-VIM.md.
Tipp
Wenn Sie Neovim verwenden und Lua-basierte Plugins bevorzugen, schauen Sie sich fzf-lua an.
fzf wird aktiv weiterentwickelt und Sie möchten es vielleicht ab und zu aktualisieren. Bitte befolgen Sie je nach verwendeter Installationsmethode die nachstehenden Anweisungen.
git: cd ~/.fzf && git pull && ./install
brew: brew update; brew upgrade fzf
macports: sudo port upgrade fzf
schokoladig: choco upgrade fzf
vim-plug: :PlugUpdate fzf
Siehe BUILD.md.
fzf startet den interaktiven Finder, liest die Liste von STDIN und schreibt das ausgewählte Element nach STDOUT.
find * -type f | fzf > ausgewählt
Ohne STDIN-Pipe durchläuft fzf das Dateisystem im aktuellen Verzeichnis, um die Liste der Dateien abzurufen.
vim $(fzf)
Notiz
Sie können das Standardverhalten überschreiben
Entweder indem man $FZF_DEFAULT_COMMAND
auf einen Befehl setzt, der die gewünschte Liste generiert
Oder indem Sie die Optionen --walker
, --walker-root
und --walker-skip
in $FZF_DEFAULT_OPTS
festlegen
Warnung
Eine robustere Lösung wäre die Verwendung xargs
aber wir haben das oben Gesagte vorgestellt, da es einfacher zu verstehen ist
fzf --print0 | xargs -0 -o vim
Tipp
fzf hat auch die Fähigkeit, sich in einen anderen Prozess zu verwandeln.
fzf --bind 'enter:become(vim {})'
Weitere Informationen finden Sie unter In einen anderen Prozess umwandeln.
CTRL-K
/ CTRL-J
(oder CTRL-P
/ CTRL-N
), um den Cursor nach oben und unten zu bewegen
Enter
zum Auswählen des Elements, CTRL-C
/ CTRL-G
/ ESC
zum Beenden
Im Mehrfachauswahlmodus ( -m
) TAB
und Shift-TAB
zum Markieren mehrerer Elemente
Schlüsselbelegung im Emacs-Stil
Maus: scrollen, klicken, doppelklicken; Umschalt-Klick und Umschalt-Bildlauf im Mehrfachauswahlmodus
fzf läuft standardmäßig im Vollbildmodus, es gibt jedoch auch andere Anzeigemodi.
--height
Modus Mit --height HEIGHT[%]
startet fzf unterhalb des Cursors mit der angegebenen Höhe.
fzf --height 40 %
reverse
Layout und --border
passen gut zu dieser Option.
fzf --height 40% --layout reverse --border
Indem Sie der Höhe ~
voranstellen, legen Sie die maximale Höhe fest.
# Benötigt so wenige Zeilen wie möglich, um die Listen anzuzeigen. 3 | fzf --height ~100 % seq 3000 | fzf --height ~100 %
Der Höhenwert kann eine negative Zahl sein.
# Bildschirmhöhe - 3fzf --height -3
--tmux
Modus Mit der Option --tmux
startet fzf in einem tmux-Popup.
# --tmux [center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]fzf --tmux center # Mitte, 50 % Breite und Höhefzf --tmux 80 % # Mitte, 80 % Breite und Höhefzf --tmux 100 %,50 % # Mitte, 100 % Breite und 50 % Höhefzf --tmux left,40% # Links, 40% Breitefzf --tmux left,40%,90% # Links, 40% Breite, 90% Höhefzf --tmux top,40% # Oben, 40% Höhefzf --tmux unten,80% ,40 % # Unten, 80 % Höhe, 40 % Höhe
--tmux
wird stillschweigend ignoriert, wenn Sie nicht mit tmux arbeiten.
Notiz
Wenn Sie mit einer alten Version von tmux nicht weiterkommen, die kein Popup unterstützt, oder wenn Sie fzf in einem normalen tmux-Bereich öffnen möchten, schauen Sie sich das Skript fzf-tmux an.
Tipp
Sie können diese Optionen zu $FZF_DEFAULT_OPTS
hinzufügen, sodass sie standardmäßig angewendet werden. Zum Beispiel,
# Im tmux-Popup öffnen, wenn auf tmux, andernfalls verwenden Sie --height modeexport FZF_DEFAULT_OPTS='--height 40% --tmux bottom,40% --layout reverse --border top'
Sofern nicht anders angegeben, startet fzf im „erweiterten Suchmodus“, in dem Sie mehrere durch Leerzeichen getrennte Suchbegriffe eingeben können. zB ^music .mp3$ sbtrkt !fire
Token | Übereinstimmungstyp | Beschreibung |
---|---|---|
sbtrkt | Fuzzy-Match | Elemente, die mit sbtrkt übereinstimmen |
'wild | exakte Übereinstimmung (zitiert) | Elemente, wild enthalten |
'wild' | Exakte Grenzübereinstimmung (an beiden Enden zitiert) | Elemente, die an Wortgrenzen wild enthalten |
^music | Präfix-genaue Übereinstimmung | Artikel, die mit music beginnen |
.mp3$ | Suffix-genaue Übereinstimmung | Elemente, die mit .mp3 enden |
!fire | inverse-exakte-Übereinstimmung | Gegenstände, die kein fire enthalten |
!^music | inverses-Präfix-genaue-Übereinstimmung | Elemente, die nicht mit music beginnen |
!.mp3$ | inverses-suffix-exakte-übereinstimmung | Elemente, die nicht mit .mp3 enden |
Wenn Sie kein Fuzzy-Matching bevorzugen und nicht jedes Wort in Anführungszeichen setzen möchten, starten Sie fzf mit der Option -e
oder --exact
. Beachten Sie, dass, wenn --exact
festgelegt ist, '
-prefix den Begriff in Anführungszeichen setzt.
Ein einzelner Balkenzeichenbegriff fungiert als ODER-Operator. Die folgende Abfrage sucht beispielsweise nach Einträgen, die mit core
beginnen und entweder mit go
, rb
oder py
enden.
^core go$ | rb$ | py$
FZF_DEFAULT_COMMAND
Standardbefehl, der verwendet wird, wenn die Eingabe tty ist
zB export FZF_DEFAULT_COMMAND='fd --type f'
FZF_DEFAULT_OPTS
Standardoptionen
zB export FZF_DEFAULT_OPTS="--layout=reverse --inline-info"
FZF_DEFAULT_OPTS_FILE
Wenn Sie Standardoptionen lieber in einer Datei verwalten möchten, legen Sie diese Variable so fest, dass sie auf den Speicherort der Datei verweist
zB export FZF_DEFAULT_OPTS_FILE=~/.fzfrc
Warnung
FZF_DEFAULT_COMMAND
wird aufgrund der geringfügigen Unterschiede in den Anforderungen nicht von der Shell-Integration verwendet.
CTRL-T
führt $FZF_CTRL_T_COMMAND
aus, um eine Liste von Dateien und Verzeichnissen abzurufen
ALT-C
führt $FZF_ALT_C_COMMAND
aus, um eine Liste der Verzeichnisse abzurufen
vim ~/**
führt fzf_compgen_path()
mit dem Präfix ( ~/
) als erstes Argument aus
cd foo**
führt fzf_compgen_dir()
mit dem Präfix ( foo
) als erstes Argument aus
Die verfügbaren Optionen werden später in diesem Dokument beschrieben.
Die vollständige Liste der Optionen finden Sie auf der Manpage ( man fzf
).
Wenn Sie durch das Ansehen von Videos lernen, schauen Sie sich diesen Screencast von @samoshkin an, um die Funktionen fzf
kennenzulernen.
Wiki-Seite mit Beispielen
Haftungsausschluss: Die Beispiele auf dieser Seite werden von der Community gepflegt und nicht gründlich getestet
Erweiterte fzf-Beispiele
Durch Einrichten der Shell-Integration können Sie die folgenden Tastenkombinationen in Bash, ZSH und Fish verwenden.
CTRL-T
– Fügt die ausgewählten Dateien und Verzeichnisse in die Befehlszeile ein
Sie können das Verhalten überschreiben, indem Sie FZF_CTRL_T_COMMAND
auf einen benutzerdefinierten Befehl setzen, der die gewünschte Liste generiert
Oder Sie können --walker*
-Optionen in FZF_CTRL_T_OPTS
festlegen
Die Liste wird mit der Option --walker file,dir,follow,hidden
generiert
Legen Sie FZF_CTRL_T_OPTS
fest, um zusätzliche Optionen an fzf zu übergeben
# Vorschau des Dateiinhalts mit bat (https://github.com/sharkdp/bat)export FZF_CTRL_T_OPTS=" --walker-skip .git,node_modules,target --preview 'bat -n --color=always {}' - -bind 'ctrl-/:change-preview-window(down|hidden|)'"
Kann deaktiviert werden, indem FZF_CTRL_T_COMMAND
bei der Beschaffung des Skripts auf eine leere Zeichenfolge gesetzt wird
CTRL-R
– Fügt den ausgewählten Befehl aus dem Verlauf in die Befehlszeile ein
Wenn Sie die Befehle in chronologischer Reihenfolge sehen möchten, drücken Sie erneut CTRL-R
, um die Sortierung nach Relevanz umzuschalten
Drücken Sie CTRL-/
oder ALT-/
um den Zeilenumbruch ein-/auszuschalten
Legen Sie FZF_CTRL_R_OPTS
fest, um zusätzliche Optionen an fzf zu übergeben
# STRG-Y, um den Befehl mit pbcopyexport in die Zwischenablage zu kopieren FZF_CTRL_R_OPTS=" --bind 'ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort' --color header:italic --header „Drücken Sie STRG-Y, um den Befehl in die Zwischenablage zu kopieren.“
ALT-C
- cd in das ausgewählte Verzeichnis
Oder Sie können --walker-*
Optionen in FZF_ALT_C_OPTS
festlegen
Die Liste wird mit der Option --walker dir,follow,hidden
generiert
Legen Sie FZF_ALT_C_COMMAND
fest, um den Standardbefehl zu überschreiben
Legen Sie FZF_ALT_C_OPTS
fest, um zusätzliche Optionen an fzf zu übergeben
# Baumstruktur im Vorschaufenster druckenexport FZF_ALT_C_OPTS=" --walker-skip .git,node_modules,target --preview 'tree -C {}'"
Kann deaktiviert werden, indem FZF_ALT_C_COMMAND
bei der Beschaffung des Skripts auf eine leere Zeichenfolge gesetzt wird
Anzeigemodi für diese Bindungen können separat über FZF_{CTRL_T,CTRL_R,ALT_C}_OPTS
oder global über FZF_DEFAULT_OPTS
konfiguriert werden. (z. B. FZF_CTRL_R_OPTS='--tmux bottom,60% --height 60% --border top'
)
Weitere Tipps finden Sie auf der Wiki-Seite.
Die Fuzzy-Vervollständigung für Dateien und Verzeichnisse kann ausgelöst werden, wenn das Wort vor dem Cursor mit der Triggersequenz endet, was standardmäßig **
ist.
COMMAND [DIRECTORY/][FUZZY_PATTERN]**
# Dateien im aktuellen Verzeichnis# – Sie können mehrere Elemente mit der TAB-Taste auswählenvim **# Dateien im übergeordneten Verzeichnisvim ../** # Dateien im übergeordneten Verzeichnis, die mit „fzf“vim ../fzf* übereinstimmen * # Dateien unter Ihrem Home-Verzeichnisvim ~/** # Verzeichnisse unter dem aktuellen Verzeichnis (Einzelauswahl)cd ** # Verzeichnisse unter ~/github, die übereinstimmen `fzf`cd ~/github/fzf**
Für den Kill-Befehl steht eine Fuzzy-Vervollständigung für PIDs zur Verfügung.
# Kann mehrere Prozesse mitoder keyskill -9 ** auswählen
Für SSH- und Telnet-Befehle wird eine Fuzzy-Vervollständigung für Hostnamen bereitgestellt. Die Namen werden aus /etc/hosts und ~/.ssh/config extrahiert.
ssh **telnet **
unset **export ** unalias **
# Verwenden Sie ~~ als Triggersequenz anstelle der Standardsequenz. **export FZF_COMPLETION_TRIGGER='~~'# Optionen für fzf commandexport FZF_COMPLETION_OPTS='--border --info=inline'# Verwenden Sie fd (https://github.com/ sharkdp/fd) zum Auflisten von Pfadkandidaten.# – Das erste Argument der Funktion ($1) ist der Basispfad zum Starten der Traversierung# – Siehe Quellcode (completion.{bash,zsh}) für die Details._fzf_compgen_path() { fd --hidden --follow --exclude ".git" . "$1"}# Verwenden Sie fd, um die Liste für das Verzeichnis zu generierencomplete_fzf_compgen_dir() { fd --type d --hidden --follow --exclude ".git" . "$1"}# Erweiterte Anpassung der fzf-Optionen über die Funktion _fzf_comprun# – Das erste Argument der Funktion ist der Name des Befehls.# – Sie sollten sicherstellen, dass Sie die restlichen Argumente an fzf._fzf_comprun() { lokalen Befehl übergeben =$1 Schicht case „$command“ incd) fzf --preview 'tree -C {} | Kopf -200' "$@" ;; export|unset) fzf --preview "eval 'echo $'{}" "$@" ;; ssh) fzf --preview 'dig {}' "$@" ;;*) fzf --preview 'bat -n --color=always {}' "$@" ;; esac}
Bei Bash ist die Fuzzy-Vervollständigung nur für einen vordefinierten Befehlssatz aktiviert ( complete | grep _fzf
um die Liste anzuzeigen). Sie können es aber auch für andere Befehle aktivieren, indem Sie die Hilfsfunktion _fzf_setup_completion
verwenden.
# Verwendung: _fzf_setup_completion path|dir|var|alias|host COMMANDS..._fzf_setup_completion path ag git kubectl _fzf_setup_completion Verzeichnisbaum
(Die benutzerdefinierte Vervollständigungs-API ist experimentell und kann geändert werden.)
Definieren Sie für einen Befehl mit dem Namen „COMMAND“ die Funktion _fzf_complete_COMMAND
mithilfe des Hilfsprogramms _fzf_complete
.
# Benutzerdefinierte Fuzzy-Vervollständigung für den Befehl „doge“# z. B. doge **_fzf_complete_doge() { _fzf_complete --multi --reverse --prompt="doge> " -- "$@" < <( echo very echo wow echo such echo doge )}
Die Argumente vor --
sind die Optionen für fzf.
Übergeben Sie nach --
einfach die ursprünglichen Abschlussargumente unverändert ( "$@"
).
Schreiben Sie dann eine Reihe von Befehlen, die die Vervollständigungskandidaten generieren, und geben Sie deren Ausgabe mithilfe der Prozesssubstitution ( < <(...)
) an die Funktion weiter.
zsh übernimmt die Funktion automatisch anhand der Namenskonvention, aber in Bash müssen Sie die Funktion manuell mit dem Befehl verknüpfen, indem Sie den complete
Befehl verwenden.
[ -n "$BASH" ] && komplett -F _fzf_complete_doge -o default -o bashdefault doge
Wenn Sie die Ausgabe von fzf nachbearbeiten müssen, definieren Sie _fzf_complete_COMMAND_post
wie folgt.
_fzf_complete_foo() { _fzf_complete --multi --reverse --header-lines=3 -- "$@" < <( ls -al )}_fzf_complete_foo_post() { awk '{print $NF}'} [ -n "$BASH" ] && komplett -F _fzf_complete_foo -o default -o bashdefault foo
Siehe README-VIM.md.
fzf ist schnell. Die Leistung sollte in den meisten Anwendungsfällen kein Problem darstellen. Allerdings sollten Sie sich über die Optionen im Klaren sein, die sich auf die Leistung auswirken können.
--ansi
weist fzf an, ANSI-Farbcodes in der Eingabe zu extrahieren und zu analysieren, und verlangsamt dadurch den anfänglichen Scanvorgang. Es wird daher nicht empfohlen, es zu Ihrem $FZF_DEFAULT_OPTS
hinzuzufügen.
--nth
macht fzf langsamer, da jede Zeile tokenisiert werden muss.
--with-nth
macht fzf langsamer, da fzf jede Zeile tokenisieren und neu zusammensetzen muss.
Sie können Tastenkombinationen zum Starten externer Prozesse einrichten, ohne fzf zu verlassen ( execute
, execute-silent
).
# Drücken Sie F1, um die Datei mit less zu öffnen, ohne fzf zu verlassen# Drücken Sie STRG-Y, um die Zeile in die Zwischenablage zu kopieren und abzubrechen fzf (erfordert pbcopy)fzf --bind 'f1:execute(less -f {}),ctrl-y: execute-silent(echo {} | pbcopy)+abort'
Weitere Informationen finden Sie im Abschnitt „KEY BINDINGS“ der Manpage.
become(...)
ähnelt dem oben beschriebenen execute(...)
/ execute-silent(...)
, aber anstatt den Befehl auszuführen und nach Abschluss zu fzf zurückzukehren, wird fzf in einen neuen Prozess für den umgewandelt Befehl.
fzf --bind 'enter:become(vim {})'
Im Vergleich zur scheinbar gleichwertigen Befehlsersetzung vim "$(fzf)"
hat dieser Ansatz mehrere Vorteile:
Vim öffnet keine leere Datei, wenn Sie fzf mit STRG-C beenden
Vim öffnet keine leere Datei, wenn Sie bei einem leeren Ergebnis die EINGABETASTE drücken
Kann Mehrfachauswahlen verarbeiten, selbst wenn sie Leerzeichen enthalten
fzf --multi --bind 'enter:become(vim {+})'
Um fair zu sein, führen Sie fzf --print0 | xargs -0 -o vim
aus fzf --print0 | xargs -0 -o vim
anstelle von vim "$(fzf)"
behebt alle genannten Probleme. Dennoch bietet become(...)
in verschiedenen Szenarien noch zusätzliche Vorteile.
Sie können mehrere Bindungen einrichten, um das Ergebnis auf unterschiedliche Weise ohne Umbruchskript zu verarbeiten
fzf --bind 'enter:become(vim {}),ctrl-e:become(emacs {})'
Zuvor mussten Sie --expect=ctrl-e
verwenden und die erste Zeile der Ausgabe von fzf überprüfen
Sie können den folgenden Befehl einfach mit den Feldindexausdrücken von fzf erstellen
# Öffnen Sie die Datei in Vim und gehen Sie zu linegit grep --line-number . |fzf --delimiter : --nth 3.. --bind 'enter:become(vim {1} +{2})'
Indem Sie die reload
an eine Taste oder ein Ereignis binden, können Sie fzf veranlassen, die Kandidatenliste dynamisch neu zu laden. Weitere Einzelheiten finden Sie unter #1750.
ps -ef | fzf --bind 'ctrl-r:reload(ps -ef)' --header 'Drücken Sie STRG-R, um neu zu laden' --header-lines=1 --height=50% --layout=reverse
FZF_DEFAULT_COMMAND='find . -typ f' fzf --bind 'ctrl-d:reload(find . -type d),ctrl-f:reload(eval "$FZF_DEFAULT_COMMAND")' --height=50% --layout=reverse
Das folgende Beispiel verwendet fzf als Auswahlschnittstelle für Ripgrep. Wir haben die reload
an change
gebunden, sodass der Ripgrep-Prozess jedes Mal, wenn Sie fzf eingeben, mit der aktualisierten Abfragezeichenfolge neu gestartet wird, die durch den Platzhalterausdruck {q}
angegeben wird. Beachten Sie außerdem, dass wir die Option --disabled
verwendet haben, damit fzf keine sekundäre Filterung durchführt.
: | rg_prefix='rg --column --line-number --no-heading --color=always --smart-case' fzf --bind 'start:reload:$rg_prefix ""' --bind 'change:reload:$rg_prefix {q} || WAHR' --bind 'enter:become(vim {1} +{2})' --ansi --disabled --height=50% --layout=reverse
Wenn ripgrep keine Übereinstimmungen findet, wird es mit einem Exit-Status ungleich Null beendet und fzf warnt Sie darüber. Um die Warnmeldung zu unterdrücken, haben wir || true
hinzugefügt dem Befehl || true
, so dass er immer mit 0 beendet wird.
Ausführlichere Beispiele finden Sie unter „Verwenden von fzf als interaktiven Ripgrep-Launcher“.
Wenn die Option --preview
gesetzt ist, startet fzf automatisch einen externen Prozess mit der aktuellen Zeile als Argument und zeigt das Ergebnis im geteilten Fenster an. Ihre $SHELL
wird verwendet, um den Befehl mit $SHELL -c COMMAND
auszuführen. Das Fenster kann mit der Maus oder benutzerdefinierten Tastenkombinationen gescrollt werden.
# {} wird durch die Zeichenfolge in einfachen Anführungszeichen der fokussierten Zeile ersetztfzf --preview 'cat {}'
Das Vorschaufenster unterstützt ANSI-Farben, sodass Sie jedes Programm verwenden können, das den Inhalt einer Datei syntaktisch hervorhebt, z. B. Bat oder Highlight:
fzf --preview 'bat --color=always {}' --preview-window '~3'
Sie können die Größe, Position und den Rand des Vorschaufensters mit der Option --preview-window
und die Vorder- und Hintergrundfarbe mit der Option --color
anpassen. Zum Beispiel,
fzf --height 40% --layout reverse --info inline --border --preview 'file {}' --preview-window up,1,border-horizontal --bind 'ctrl-/:change-preview-window(50%|hidden|)' --color 'fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899'
Die vollständige Liste der Optionen finden Sie auf der Manpage ( man fzf
).
Weitere fortgeschrittene Beispiele finden Sie hier.
Warnung
Da es sich bei fzf um einen Allzweck-Textfilter und nicht um einen Dateifinder handelt, ist es keine gute Idee, die Option --preview
zu Ihrem $FZF_DEFAULT_OPTS
hinzuzufügen .
# *********************# ** TUN SIE DAS NICHT! **# *********************export FZF_DEFAULT_OPTS='--preview "bat --style=numbers --color=always --line-range :500 {}"'# bat funktioniert mit keiner anderen Eingabe als der Dateilisteps -ef | fzf seq 100 | fzfhistory | fzf
fzf kann Bilder im Vorschaufenster mit einem der folgenden Protokolle anzeigen:
Kitty-Grafikprotokoll
iTerm2-Inline-Bildprotokoll
Sixel
Weitere Informationen finden Sie im Skript bin/fzf-preview.sh.
fzf --preview 'fzf-preview.sh {}'
.gitignore
Sie können fd, ripgrep oder den Silver Searcher verwenden, um das Dateisystem unter Berücksichtigung von .gitignore
zu durchsuchen.
# Füttere die Ausgabe von fd in fzffd --type f --strip-cwd-prefix | fzf# Festlegen von fd als Standardquelle für fzfexport FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix'# Jetzt verwendet fzf (ohne Pipe) den fd-Befehl, um die Liste zu generierenfzf# Um den Befehl anzuwenden Auch CTRL-T exportieren FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
Wenn Sie möchten, dass der Befehl symbolischen Links folgt und versteckte Dateien nicht ausschließt, verwenden Sie den folgenden Befehl:
export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix --hidden --follow --exclude .git'
CTRL-T
-Tastenkombination von Fish verwendet im Gegensatz zu denen von Bash und ZSH das letzte Token in der Befehlszeile als Stammverzeichnis für die rekursive Suche. Drücken Sie beispielsweise CTRL-T
am Ende der folgenden Befehlszeile
ls /var/
listet alle Dateien und Verzeichnisse unter /var/
auf.
Wenn Sie ein benutzerdefiniertes FZF_CTRL_T_COMMAND
verwenden, verwenden Sie die nicht erweiterte Variable $dir
, um diese Funktion zu nutzen. $dir
ist standardmäßig auf .
wenn das letzte Token kein gültiges Verzeichnis ist. Beispiel:
set -g FZF_CTRL_T_COMMAND "Befehl find -L $dir -type f 2> /dev/null | sed '1d; s#^./##'"
Der von Vitor Mello erstellte fzf Theme Playground ist eine Webseite, auf der Sie interaktiv fzf-Themen erstellen können.
https://github.com/junegunn/fzf/wiki/Related-projects
Die MIT-Lizenz (MIT)
Copyright (c) 2013-2024 Junegunn Choi