V predchádzajúcom príspevku som načrtol, že
existujú určité výhody toho, ak príkaz fzf vyhľadáva všade v domovskom
priečinku namiesto len v aktuálnom pracovnom adresári. Nastavenie popísané
tam umožňuje yankovanie a vkladanie riadkov zo súborov uložených na
vzdialených miestach (z pohľadu hĺbky priechodu). No má to výraznú cenu —
je ešte ťažšie dostať sa k relevantným súborom uloženým blízko seba, keďže
skutočná cesta zneprehľadňuje zobrazenie, výstup vypíše všetky súbory v
domovskom priečinku vrátane skrytých súborov (súborov začínajúcich bodkou,
dotfiles). Navyše pri veľkom počte súborov môže začať hrať rolu aj pokles
rýchlosti. Je to celkom nepríjemná situácia, ale dá sa výrazne zlepšiť.
Ignorovanie skrytých súborov pomocou fzf #
Samozrejme je možné
vylúčiť skryté súbory z výstupu príkazu find.
Zároveň však existujú príkazy na vyhľadávanie, ktoré to robia automaticky,
bez väčšej námahy, napríklad fd.
Nahradenie troch riadkov tak, aby fzf ignoroval skryté súbory, môže byť v
.zshrc takto:
export FZF_DEFAULT_COMMAND="fd --type f"
export FZF_CTRL_T_COMMAND="fd --type f"
export FZF_ALT_C_COMMAND="fd --type f"
Tým, že vo vyhľadávaniach fzf používame fd namiesto find, získame ešte
jednu výhodu zadarmo.
Vylúčenie ignorovaných súborov #
Okrem ignorovania skrytých súborov fd rešpektuje aj súbory .gitignore.
Ako vedľajší efekt vylúčenia skrytých súborov z výstupu teda zároveň
vylúčime aj ignorované súbory. To je výhodné, pretože výrazne redukuje
neporiadok z priečinkov ako node_modules, keďže tieto sú bežne ignorované
v repozitároch.
Viem, že niektoré iné programovacie jazyky okrem node, ako go alebo rust, dokážu vytvárať rozsiahle štruktúry priečinkov v domovskom priečinku, pričom zvyčajne nepotrebujeme manuálne upravovať ani prezerať žiadne súbory v nich, keďže obsahujú kód balíčkov stiahnutých z internetu.
Bohužiaľ, fd rešpektuje .gitignore iba
pri použití v skutočnom git repozitári.
Nie som si istý prečo je to tak, ale problém sa dá stále elegantne
vyriešiť. Stačí inštruovať fd, aby ignoroval konkrétne priečinky mimo git
repozitára, jednoducho ich uviesť v .fdignore.
Bežné priečinky na vylúčenie #
Takže ak napríklad používate príkaz yay na prístup k softvérovým balíčkom
z AUR, pravdepodobne máte priečinok ~/go/. Podobný príbeh platí pre
paru, nástupcu/odvodeninu yay, ale tentokrát by ste mohli chcieť
vylúčiť výsledky priečinka ~/rust/. Teraz vložte niečo relevantné do
~/.fdignore vo vašom domovskom priečinku:
/go/
/rust/
Súbor .fdignore má rovnakú syntax ako .gitignore, čo znamená, že
lomítko na konci označuje priečinok. Lomítko na začiatku znamená, že sa má
ignorovať len záznam na najvyššej úrovni. V tomto prípade je to priečinok a
ďalší na rovnakom mieste ako súbor .fdignore — v domovskom priečinku. To
je užitočné vtedy, keď existujú priečinky s rovnakým názvom hlbšie v
strome, ktoré nechceme ignorovať — napríklad ~/work/go/ ignorovaný
nebude, ale ~/go/ áno.
Toto je 52. príspevok #100daystooffload.