fzf Fuzzy-Search-Tool Bash-Kommandozeile

Bash-Kommandozeile mit fzf Fuzzy Finder verbessern

Machen wir Vervollständigung (Autocomplete) und Suche mit fzf bequemer, einer Kommandozeilen-Software mit Fuzzy-Search (Fuzzy Finder)-Funktionalität, die Funktionen wie Befehlsverlaufssuche und Dateiauswahl mit diesen Fähigkeiten bereitstellt.

Shou Arisaka
4 Min. Lesezeit
24. Okt. 2025

Machen wir Vervollständigung (Autocomplete) und Suche mit fzf bequemer, einer Kommandozeilen-Software mit Fuzzy-Search (Fuzzy Finder)-Funktionalität, die Funktionen wie Befehlsverlaufssuche und Dateiauswahl mit diesen Fähigkeiten bereitstellt.

Die Installation ist super einfach.

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

junegunn/fzf: A command-line fuzzy finder Examples · junegunn/fzf Wiki

  • Suchsyntax

Token Match type Description sbtrkt fuzzy-match Items that match sbtrkt ‘wild exact-match (quoted) Items that include wild ^music prefix-exact-match Items that start with music .mp3$ suffix-exact-match Items that end with .mp3 !fire inverse-exact-match Items that do not include fire !^music inverse-prefix-exact-match Items that do not start with music !.mp3$ inverse-suffix-exact-match Items that do not end with .mp3

On multi-select mode (-m), TAB and Shift-TAB to mark multiple items

Grundsätzlich führt eine normale Suche eine Fuzzy-Suche durch. Wenn Sie also eine genaue Suche durchführen möchten, sollten Sie wie 'something suchen.

Lassen Sie mich nun vorstellen, wie man es verwendet.

String-Suche wird bequemer

Dies kann für die Suche innerhalb von Dateien verwendet werden. Sie können es beispielsweise verwenden, wenn Sie die Ergebnisse von —help durchsuchen möchten.

cat <<EOT  |fzf
hoge
fuga
foo
EOT

Image

Befehlsverlaufssuche wird bequemer

Dies ist wahrscheinlich die bequemste und praktischste Funktion von fzf.

Sie wissen wahrscheinlich, dass Sie den Befehlsverlauf mit Strg-R anzeigen können, aber dies macht es bequemer.

Vervollständigung (Autocomplete) wird bequemer

Die Autovervollständigung von fzf wird nicht durch zweimaliges Drücken der Tabulatortaste ausgelöst, sondern durch Eingabe von ** (zwei Sternchen) und dann Tab.

cd **<TAB>
cd ~/github/fzf**<TAB>
head /docker/**<TAB>

Einige werden jedoch durch normale Autovervollständigung überschrieben. Probieren Sie jede aus.

kill -9 <TAB>

Benutzerdefinierte Autovervollständigung implementieren

fzf ermöglicht es Ihnen auch, Ihre eigenen Tab-Vervollständigungskandidaten zu erstellen.

Image

Sie können Strings so angeben,


_fzf_complete_history() {
  _fzf_complete "--multi --reverse" "$@" < <(
    echo very
    echo wow
    echo such
    echo history
  )
}

[ -n "$BASH" ] && complete -F _fzf_complete_history -o default -o bashdefault history

Mit etwas Einfallsreichtum können Sie auch Befehlsausführungsergebnisse übergeben. Sehr praktisch.

_fzf_complete_sym() {
  _fzf_complete "--multi --reverse" "$@" < <(command ls -1 ${HOME}/sym)
}

[ -n "$BASH" ] && complete -F _fzf_complete_sym -o default -o bashdefault sym

Code, den ich tatsächlich verwende

Hier ist etwas Code, den ich tatsächlich geschrieben habe und als Beispiele verwende.

Vervollständigt Skripte, die häufig mit man [commandName] verbunden sind. Es wird wie man bash > ~/tmp.txt && sublime_text ~/tmp.txt, aber ich zeige Handbuchseiten mit sublime von WSL über x11-Weiterleitung aus einer Windows-Umgebung an. Es ist bequemer, Manpages mit sublime anzuzeigen, sei es zum Kopieren und Einfügen oder Suchen, oder vielmehr bin ich daran gewöhnt.

_fzf_complete_man() {
  _fzf_complete "--multi --reverse" "$@" < <(
    # view the man pages with sublime via x-server
    echo "> ~/tmp.txt && sublime_text ~/tmp.txt "
  )
}

[ -n "$BASH" ] && complete -F _fzf_complete_man -o default -o bashdefault man

sym [dirname] ermöglicht eine einfache Navigation zu Ihren Lieblingsverzeichnissen von jedem Verzeichnis aus. In meinem Fall habe ich einige symbolische Links zum Windows-Dateisystem in meinem sym-Ordner, hauptsächlich für Videos und Musik. Wenn ich also klassische Musik im Zufallsmodus hören möchte, mache ich sym cla**->sym _Classic, um zum Verzeichnis zu wechseln, dann shufmusic, so etwas in der Art.

Image

sym(){

: <<'HELP'
e.g. sym
e.g. sym hinabita
e.g. sym **
HELP

  [ ! -z ${1} ] && cd "${HOME}/sym/${1}" || cd "${HOME}/sym"
}

_fzf_complete_sym() {
  _fzf_complete "--multi --reverse" "$@" < <(command ls -1 ${HOME}/sym)
}

[ -n "$BASH" ] && complete -F _fzf_complete_sym -o default -o bashdefault sym

Interessante Beispiele

Wenn Sie aus dem Befehlsverlauf auswählen, wird der Befehl sofort ausgeführt. Ehrlich gesagt ist die Effizienz dieselbe wie die Auswahl aus ctrl-R und Drücken der Eingabetaste, daher denke ich nicht, dass es sich lohnt, es zu implementieren. Es kann jedoch in integrierten Systemen genutzt werden.

# fh - repeat history
fh() {
  eval $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed 's/ *[0-9]* *//')
}

Diesen Artikel teilen

Shou Arisaka 24. Okt. 2025

🔗 Links kopieren