Newsletter 365tipů můžete číst zdarma. Placené předplatné je dobrovolná podpora, která pomáhá webu pokračovat.
Podpořit 365tipů

TIP#3309: Jak v CLI (terminalu) na inteligentnější cd? zoxide a fzf vědí, kam chcete jít

Psaní dlouhých cest přes cd je jedna z věcí, které začnou být v příkazové řádce velmi rychle otravné. zoxide si pamatuje adresáře, které používáte, a příště do nich dokáže skočit jen podle části názvu.

POZNÁMKA: Další výsledek článkové „skill“ z ChatGPT. Jako základ dostala rozepsaný článek se vším zásadním, aby ho na dvou místech zkazila a napsala „čistě pro MacOS“, ač neměla, druhá verze (po asi osmi připomínkách) je už to, co vidiíte. Dost dobré aby se to použilo. A ano, „z“ resp. „zi“ jsou sakra dobrá věc.

Místo například:

cd ~/Documents/Projects/wordpress/moje-sablona

pak může stačit:

z moje-sablona

Případně můžete zadat více částí cesty:

z wordpress sablona

zoxide si pamatuje navštívené adresáře a řadí je podle kombinace četnosti a toho, jak nedávno jste je použili. Projekt tomu říká frecency. Často používané adresáře tak postupně získají přednost před těmi, kam jste zavítali jen jednou.

Nemusíte přitom adresáře navštěvovat pomocí z. zoxide se po aktivaci učí i při normálním používání cd.

Jak zoxide nainstalovat

zoxide funguje v Linuxu, macOS, Windows i WSL. Instalace se liší podle systému a správce balíčků.

Na macOS například přes Homebrew:

brew install zoxide

V Linuxu můžete použít správce balíčků vaší distribuce nebo instalační skript projektu. Pokud máte Homebrew i tam, funguje také:

brew install zoxide

Ve Windows je nejjednodušší například Winget:

winget install ajeetdsouza.zoxide

K dispozici jsou i Chocolatey, Scoop, Cargo a další možnosti. Aktuální přehled je vždy v instalační dokumentaci zoxide.

Ještě ho musíte přidat do shellu

Samotná instalace nestačí. zoxide se musí inicializovat při spuštění shellu a právě tady záleží na tom, co používáte.

ShellKam typicky přidatInicializace
zsh~/.zshrceval "$(zoxide init zsh)"
bash~/.bashrceval "$(zoxide init bash)"
fish~/.config/fish/config.fishzoxide init fish | source
PowerShellprofil PowerShelluInvoke-Expression (& { (zoxide init powershell | Out-String) })

U PowerShellu cestu k profilu zjistíte pomocí:

echo $PROFILE

zoxide podporuje i Nushell, Elvish, Tcsh, Xonsh a další shelly, takže pokud používáte něco méně běžného, podívejte se do dokumentace k nastavení shellu.

Po změně konfigurace spusťte nový shell nebo znovu načtěte jeho konfigurační soubor.

TIP: Jestli chcete zoxidex rovnou naučit nějakou složku a v ní umístěné podsložky, tak zkuste (např). zoxide add /Users/danieldocekal/*/ – v tomto případě jde o moji domovskou složku na Macu. Ověřit si přidání (a vůbec co všechno zná poté pomocí zoxide query -l (přidejte -s pro utřídění podle skóre)

z ale stále není fuzzy finder

Samotné z hledá mezi adresáři, které zoxide zná, a snaží se vybrat nejlépe odpovídající. Když si ale nejste jistí názvem, máte více podobných adresářů nebo chcete raději vidět možnosti, hodí se fzf.

fzf je obecný fuzzy finder pro příkazovou řádku. zoxide ho umí použít pro interaktivní výběr adresáře.

Místo:

z sablona

pak můžete použít:

zi sabl

a zobrazí se interaktivní seznam odpovídajících adresářů. Vyberete správný a zoxide se do něj přepne.

Tohle je praktičtější i v okamžiku, kdy si pamatujete jen část názvu. Fuzzy hledání umí pracovat s neúplným zadáním podstatně lépe než běžné přesné porovnávání. Není to ale automatický opravovač libovolných překlepů – při špatném pořadí nebo zcela jiných znacích nemusí požadovanou položku najít.

A ještě jeden důležitý háček: zi stále vybírá jen z adresářů, které zná zoxide. fzf nezačne kvůli tomu prohledávat celý disk.

Nebo pokud chcete a projet obsah HOME a přidat vše, co tam je (jedna úroveň): zoxide add ~/*/

Jak nainstalovat fzf

fzf je dostupné pro macOS, Linux i Windows.

Na macOS nebo Linuxu s Homebrew:

brew install fzf

Na Debianu nebo Ubuntu například:

sudo apt install fzf

Na Fedoře:

sudo dnf install fzf

Na Arch Linuxu:

sudo pacman -S fzf

Ve Windows přes Winget:

winget install fzf

Podporované jsou také Chocolatey, Scoop, MSYS2 a další instalační cesty.

Pro použití zi nemusíte fzf přidávat do konfigurace shellu. zoxide potřebuje pouze to, aby byl příkaz fzf nainstalovaný a dostupný.

fzf můžete používat i samostatně

fzf není doplněk vytvořený jen pro zoxide. Je to samostatný nástroj, kterému můžete předat prakticky libovolný seznam a interaktivně v něm vyhledávat.

Má také vlastní integraci do bash, zsh, fish a Nushellu, která přidává fuzzy hledání v historii, souborech, adresářích a doplňování příkazů.

To už ale není potřeba pro kombinaci zoxide + zi. Pokud vám jde jen o chytřejší přecházení mezi adresáři, stačí nainstalovat zoxide, inicializovat ho pro používaný shell a případně přidat fzf.

Pro běžné používání pak vlastně stačí pamatovat si dvě věci:

z něco

skočí rovnou do nejpravděpodobnějšího adresáře.

zi něco

nabídne interaktivní výběr, pokud si nejste jistí nebo existuje více možností.

Čím déle zoxide používáte, tím lépe jeho databáze odpovídá tomu, kam se skutečně nejčastěji přesouváte.