fzf’yi kurdum. Şimdi ne yapmalıyım? (2023)
(andrew-quinn.me)fzf, kurulur kurulmaz Ctrl+R ile komut geçmişi aramayı bulanık aramayla iyileştirir- Alt+C ile tam yolu bilmeden eski çalışma dizinlerine hızla geçilebilir
fzfkomutu, komut ikamesi ile birleştirilerek seçilen dosyayı doğrudanvi,emacs,codeile açabilirfindçıktısıfzf’ye verilirse, nginx.conf gibi konumu bilinmeyen yapılandırma dosyalarını bulmak kolaylaşırrg . | fzf, dosya adı yerine dosya içeriğindeki satırları ipucu olarak kullanıp istenen dosyayı açmayı sağlar
fzf’yi kurduktan hemen sonra elde edilen değer
- Yazılım mühendisleri kendi işlerini iyileştiren araçları kolayca yapabilir; ancak birçok araç arasında gidip gelip onları derinlemesine öğrenmezlerse, zamanla bunun maliyeti büyür
- İyi bir 80/20 sezgisi, önce
cat,ls,cd,grep,cutgibi eski Unix araçlarını öğrenmektir; modern sistem yönetimi rollerinde bunasedveawkda dahildir fzf, harcanan emeğe karşılık etkisini hemen gösterdiği ve sunduğu değer benzersiz olduğu için bu sezginin bir istisnası sayılabilir- Asıl odak, standart bir Ubuntu ortamında
fzfkurulum betiği ile kurduktan sonra hemen kullanılabilen özelliklerdir
Varsayılan kısayolların sağladığı anlık etki
-
Ctrl+R: komut geçmişini bulanık aramaya dönüştürür- Çoğu Linux ve Windows terminalinde
Ctrl+R, komutlar için geri yönde arama sağlar - Varsayılan
Ctrl+R, istenen komutu bulmak için tam eşleşme gerektirir ve aynı anda yalnızca tek bir önizleme gösterdiği için tek bir harf bile farklıysa bulmak zorlaşır fzfkurulduğunda çeşitli klavye kısayolları daha iyi davranışlarla geçersiz kılınır;Ctrl+Rda buna dahil olup mevcut yöntemi büyük ölçüde iyileştiriraptgibi bir paket yöneticisiyle kurulduğunda bu kısayol entegrasyonu gelmeyebilir; bu dafzfkurulum betiğinin neden tercih edildiğini açıklar
- Çoğu Linux ve Windows terminalinde
-
Alt+C: tam hatırlanmayan bir dizine hızlı geçişfzf,Alt+Ckısayolunu geliştirilmiş bulanık bircdkısayoluna dönüştürür- Dizinlerin tam yolunu hatırlamadığınız, yalnızca kabaca adını anımsadığınız durumlarda hızlıca geçiş yapabilirsiniz
- Boş bir terminalde, uzun süredir uğranmamış bir depo ya da çalışma dizinini bulurken işe yarar
fzf komutunun kendisi ve kabukla birleşimi
-
Temel
fzffzfkomutunu tek başına çalıştırmak, geçerli dizine göre göreli dosya yollarında bulanık arama yapar- Tek başına kullanıldığında sadece dosya konumu seçmeye yaradığı için kullanım değeri sınırlıdır
-
vi $(fzf)vi $(fzf)gibi komut ikamesiyle birleştirildiğinde, bulanık aramayla seçilen dosya düzenleyicide doğrudan açılabilir- Bu yöntem
vi’ye özel değildir;emacs,nano,codeve istediğiniz başka düzenleyicilerle de kullanılabilir
-
vi $(find . '/' | fzf)find . '/' | fzfifadesi bir düzenleyiciyle birleştirildiğinde, yeri bilinmeyen yapılandırma dosyaları tam yol adayları arasından bulanık aramayla bulunup açılabilirnginx.confgibi yerini hatırlamadığınız bir dosya için FHS bilginizi zorlayıp tahmin yürütmek veya ezber yapmak yerine,findçıktısınıfzf’ye pipe etmeniz yeterlidirconf$gibi ararsanız, yalnızcaconfile biten satırları filtreleyebilirsinizfindçok sayıdaPermission deniedhatasıyla karşılaşırsafzfkısa süreliğine takılıyormuş gibi görünebilir, ancak birkaç saniye sonra toparlanır- Bu birkaç saniyelik gecikme, yapılandırma dosyalarını son derece basit bir yolla bulmanın sağladığı faydayla yapılan bir değiş tokuştur
-
vi **<TAB>sigmonsays’in Hacker News yorumunda geçen bir özellik olarak, kısayol geçersiz kılmalarıylafzf’yi doğrudan çalıştırma arasında bir yerde duran çift yıldızla bulanık sekme tamamlama vardırvi **<TAB>,vi $(fzf)ile benzer biçimde dosya seçmek için kullanılabilir- Asıl komut tamamlandıktan sonra bir kez daha
Entertuşuna basmanız gerekir bashvezshüzerinde iyi çalışır; ancakfishiçinde bazen çalışmayabilir- Eğer
$(fzf)çağrısını açıkça yazmak size daha kolay geliyorsa, bu özelliği sık kullanmayabilirsiniz
Dosya taşımada da fzf
-
mv $(fzf) $(fzf)mv $(fzf) $(fzf), neyi taşıyacağınızı ve nereye taşıyacağınızı tam hatırlamadığınız ama her ikisi için de çok belirgin ipuçlarını hatırladığınız durumlarda kullanılabilir- Yöntem, iki ayrı
fzfseçimiyle taşınacak öğeyi ve hedefi belirlemeye dayanır - Özellikle GitHub README’sine GIF yerleştirmek gibi dosyaları taşıyıp düzenleme işlerinde sık işe yarayabilir
- İlgili bir örnek olarak
finstem’in interactive mode README’si bağlantılanmıştır
rg ile birleştirip dosya içeriğinde de bulanık arama
-
rg: özyinelemeli aramayı varsayılan yapan hızlı birgrep- Aşağıdaki birleşim
grepile de yapılabilir; ancakrgya daripgrep, özyinelemeli aramayı varsayılan yaptığı için bu kullanımda özellikle güçlüdür - Örnekleri takip etmek istiyorsanız
rgkurmanız önerilir
- Aşağıdaki birleşim
-
rg . | fzfrg ., dosyaların her satırını arama sonucu olarak üretir; bunufzf’ye verdiğinizde tüm dosyaların tüm satırlarında bulanık arama yapabilirsiniz- Böylece dosya adları yerine dosya içeriğindeki satırlar ipucu olarak kullanılabilir
-
rg . | fzf | cut -d ":" -f 1rg . | fzfile seçilen sonucacut -d ":" -f 1eklerseniz, iki nokta üst üste karakterine göre ilk alanı, yani dosya konumunu döndürebilirsiniz- Bu birleşim, satır içeriğinde bulanık arama yaptıktan sonra yalnızca o satırı içeren dosyanın yolunu alır
-
vim $(rg . | fzf | cut -d ":" -f 1)vim $(rg . | fzf | cut -d ":" -f 1), tüm dosyaların tüm satırlarında bulanık arama yaptıktan sonra, seçilen satırı içeren dosyayıvimile açar- Dosya adını hatırlamadığınız ama içeriğin bir kısmını anımsadığınız durumlarda doğrudan düzenleyiciye geçebilirsiniz
1 yorum
Lobste.rs görüşleri
Bu yazının hedef kitlesi tam benmişim gibi.
fzfkurup “dahice” diye düşünmüş, ama sonra gerçekten kullanmayı sürekli unutmuştum; şimdi belki kullanırımfzfyi sürekli kullanıyorum ama doğrudan çalıştırdığım neredeyse hiç olmuyorİyi bir yazı olabilir ama amaç “Şimdi ne yapacağım?” sorusuna cevap vermekse, fzf shell entegrasyonu ile başlamak sanki daha dar bir okur kitlesine hitap ediyor
Bash'te
ctrl-rkullanmaya alışkınım; bunu değiştirmemi istemek çıtayı fazla yükseltiyor. Varsayılanı değiştirmeden aynı davranışı pratik etmenin bir yolunu önce göstermesini isterdimctrl-r'ın yerini almasına izin vermek mantıklı ve asıl cazibesinin yarısı, eldeki alışkanlığı korurken mevcut akışa neredeyse aynı ama daha zengin bir deneyim eklemesindectrl-rmuhtemelen en sık kullandığım komut vefzf, öğrenme eğrisi olmadan anında yerine oturan bir iyileştirmeydi.ctrl-rile çalıştığı içinfzfkullanmayı unutmak da mümkün olmuyor. Gerçi daha sonra Fish shell'e geçtim ve orada aynı davranış zaten varsayılan olarak geliyorİkna oldum. Yakında
fzfve shell entegrasyonunu ekleyeceğim; bugün bir şey öğrenmiş oldumKomuta eklenecek dosyaları bulurken
ctrl-tkısayolunu da kullanabilirsiniz. Belirli bir değişikliğe dahil edilecek dosyaları seçerken bunugitile sık kullanıyorum;grepçıktısını filtreleyip aranacak kapsamı daraltmak için de kullandımShell geçmişi aramayı iyileştirmenin dışında,
fzfyi şu iki alias ile de kullanıyorumalias gbd='git -c color.ui=never branch | fzf | xargs -I {} git branch -D {}'Bunu çoğunlukla pull request merge edildikten sonra silinecek yerel branch'lerin listesini seçmek için kullanıyorum. Daha iyi bir yol olabilir ama şimdiye kadar hiç sorun çıkarmadı
alias awp='export AWS_PROFILE="$(grep -e "\[\(.*\)\]" ~/.aws/config | sed -e "s/\[//g" | sed -e "s/\]//g" | cut -d " " -f 2 | sort -u | fzf)"'~/.aws/configiçindeki değerlere göre AWS_PROFILE'ı hızlıca değiştirmemi sağlıyor. Şimdi Kubernetes namespace değiştirmek için de benzer bir alias yapmayı düşünüyorumfzf.vim eklentisini kullanırsanız vim içinde
fzfkullanabilirsiniz. Sadece dosya açmak için değil, buffer'lar, komut geçmişi, dosya içerikleri gibi şeylerde de fuzzy search yapabilirsinizfzfnin ana kullanım alanı, doğrusal Git commit geçmişini gezip arayarak son zamanlarda nelerin değiştiğini anlamakVarsayılan Git yapılandırmamda
git fzfşöyle tanımlıGaliba bir şeyi kaçırıyorum. Ne yapacağını bilmeyen biri neden fzf kursun, bunu merak ediyorum
Yakın zamanda bununla ilgili başka bir yazı da vardı. Bir kullanıcı
jjiçin dosya seçici olarakfzfkullanıyorhttps://lobste.rs/s/exlogg/jjj