Mittels Fuzzyfind in Git Ordner springen

2 Min Lesezeit CC BY-ND 4.0 open-source command-line git linux macos

Als ich project-below baute, hatte ich damit einen anderen Anwendungsfall vor: Skripte in allen Projekten unterhalb des aktuellen Ordners ausführen. Dafür benutze ich das Tool auch regelmäßig, aber mittlerweile benutze ich es deutlich häufiger, um in eines meiner lokalen Projekte zu springen. Ich bin mir bewusst, dass man mit fd (+ fzf), zoxide oder autojump ähnliches erreichen kann, aber für mich funktioniert mein Weg hier besser.

Mein Ziel ist es, mal eben in ein anderes Projekt von mir zu springen. Projekte sind bei mir immer Git Repositorys, welche im ~/git Ordner liegen. Und ein Tool, welches Ordner von Projekten auf Basis bestimmter Eigenschaften findet, habe ich ja mit projekt-below.

Ich fange mit einem simplen Beispiel an, welches fd und fzf nutzt:

So sieht das als Alias aus:

alias cdf='cd "$(fd --type=directory | fzf)"'

Nun will ich aber nicht jeden Ordner haben, sondern nur Git Projekte. Hier nutze ich dann mein project-below. Und da ich das meistens zum Wechseln von einem zum anderen Projekt nutze, starte ich direkt im ~/git Ordner.

alias cdg='cd ~/git && cd "$(project-below --directory=.git --list | fzf)"'

Damit habe ich zwei mittlerweile recht häufig genutzte Befehle, cdg und cdf.

Man kann auch noch --preview von fzf nutzen, habe ich eine Weile, aber nie darauf geachtet, was dann dort angezeigt wird, also flog es wieder raus.

Warum aber fd oder project-below und nicht zum Beispiel zoxide? Ich persönlich mag keinen Zustand (State). Projekte wie zoxide bauen einen Cache auf, was man häufig benutzt und funktionieren daher nur mit diesem Cache wirklich gut. Ich wechsele aber zu häufig die Geräte und will diesen Cache nicht mitnehmen. Außerdem halte ich Cache / State für einen Seiteneffekt mit Fehlerpotenzial, wenn es sich also vermeiden lässt, nehme ich das gerne. Und project-below ist dank guter Filter noch schneller als fd im eigenen Dateisystem unterwegs. Messbar ist es zwar, aber im Alltag merke ich keine Verzögerung beim Benutzen.

Eine ganze Liste von meinen Aliasen gibt es in meinem LinuxScripts Repository. Da sind sicherlich für den ein oder anderen noch ein paar Inspirationen enthalten. Und wenn du hier oder dort ein “Wieso machst du dass denn so kompliziert?” findest, freue ich mich natürlich auch über die Optimierungsvorschläge. ;)