fzf'yi kurdum. Şimdi ne yapmalıyım? (2023)
(andrew-quinn.me)- Komut satırı bulanık bulucu
fzf, harcanan çabaya karşı anında ve kendine özgü bir değer sunar; ancak birçok geliştirici onu sadece kurup nasıl kullanacağını bilmeden vazgeçer Ctrl+Rgeçmiş aramasını bulanık eşleştirme ve çoklu önizleme ile değiştirerek, mevcut tam dize eşleşmesi yaklaşımının yarattığı rahatsızlığı gidermek mümkündürAlt+Cile dizin adını sadece kabaca hatırlasanız bile bulanık cd yapılabilir vevi $(fzf)birleşimiyle dosyaları anında açan bir iş akışı kurulabilirripgrepile pipe üzerinden birleştirildiğinde, tüm dosyalardaki tüm satırlarda bulanık arama yapıp ardından ilgili dosyayı doğrudan editörde açan gelişmiş kullanım mümkündür- Mevcut Unix araçlarını (
cat,grep,findvb.) önce öğrenmeyi öneren 80/20 sezgisel kuralını bile boşa çıkaracak kadar anlık üretkenlik artışı sağlayan bir araçtır
fzfyi kurduktan hemen sonra elde edilebilecek değer
- Yazılım mühendisleri kendi işlerini iyileştiren araçları kolayca yapabilir; ancak birçok araç arasında dolaşıp hiçbirini derinlemesine öğrenmezlerse bunun maliyeti zamanla büyür
- İyi bir 80/20 sezgisel kural, önce
cat,ls,cd,grep,cutgibi eski Unix araçlarını öğrenmektir; modern sistem yönetimi rollerinde bunasedveawkda dahildir fzf, harcanan çabaya karşı anında geri dönüş sağlaması ve sunduğu değerin benzersiz olması nedeniyle bu sezgisel kuralın bir istisnası olarak görülebilir- Standart Ubuntu ortamında
fzfkurulum betiği ile kurduktan sonra hemen kullanabileceğiniz özellikler asıl odak noktasıdır
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 ters yönde arama sunar - Varsayılan
Ctrl+R, istediğiniz komutu bulmak için tam eşleşme ister ve aynı anda yalnızca tek bir önizleme gösterdiğinden, tek bir karakter bile farklıysa aramayı zorlaştırır fzfkurulduğunda çeşitli klavye kısayolları daha iyi davranışlarla geçersiz kılınır veCtrl+Rda mevcut yaklaşıma göre ciddi biçimde iyileşiraptgibi paket yöneticileriyle kurulum yapıldığında bu kısayol entegrasyonu gelmeyebilir; bu dafzfkurulum betiğini kullanmak için bir nedendir
- Çoğu Linux ve Windows terminalinde
-
Alt+C: tam hatırlamadığınız bir dizine hızla geçinfzf,Alt+Ckısayolunu geliştirilmiş bir bulanıkcdkısayoluna dönüştürür- Dizin yolunu tam olarak hatırlamadığınız, ama adına dair kabaca bir fikriniz olduğu durumlarda hızlı geçiş yapabilirsiniz
- Boş bir terminalde, uzun süredir ziyaret etmediğiniz bir depo veya çalışma dizinini bulurken kullanışlıdır
fzf komutunun kendisi ve shell ile birleşimleri
-
Temel
fzffzfkomutunu doğrudan çalıştırdığınızda, mevcut dizine göre göreli dosya yolları arasında bulanık arama yapar- Tek başına kullanıldığında esasen dosya konumu seçmeye yarar, bu yüzden kullanım alanı sınırlıdır
-
vi $(fzf)vi $(fzf)gibi komut ikamesiyle birleştirildiğinde, bulanık aramayla seçilen dosyayı doğrudan editörde açabilirsiniz- Bu yöntem
viye özgü değildir;emacs,nano,codeve istediğiniz başka editörlerle de kullanılabilir
-
vi $(find . '/' | fzf)find . '/' | fzfifadesi bir editörle birleştirildiğinde, yerini bilmediğiniz bir yapılandırma dosyasını tüm yol adayları arasında bulanık aramayla bulup açabilirsiniznginx.confgibi yerini hatırlamadığınız bir dosyayı bulurken FHS bilginize güvenip tahmin yürütmek ya da ezberlemek yerine,findçıktısınıfzfye pipe etmeniz yeterlidirconf$gibi aramalarlaconfile biten satırları filtreleyebilirsinizfindçok sayıdaPermission deniedhatasıyla karşılaşırsafzfkısa süreliğine tökezleyebilir, ancak birkaç saniye sonra toparlanır- Bu birkaç saniyelik gecikme, yapılandırma dosyalarını son derece basit bir yöntemle bulmanın getirdiği faydayla yapılan bir takastır
-
vi **<TAB>sigmonsaysadlı kullanıcının Hacker News yorumu ile öne çıkan bir özellik olarak, kısayol geçersiz kılmaları ilefzfyi doğrudan çalıştırmak arasında bir yerde duran, çift yıldızlı bulanık sekme tamamlama bulunurvi **<TAB>,vi $(fzf)ye benzer şekilde dosya seçmek için kullanılabilir- Gerçek komut tamamlandıktan sonra ayrıca bir kez daha
Entertuşuna basmanız gerekir - bash ve zsh'de iyi çalışır, ancak
fishiçinde bazı durumlarda çalışmayabilir $(fzf)ifadesini açıkça çağırma yöntemi size daha kolay hatırlanıyorsa, bu özelliği sık kullanmayabilirsiniz
Dosya taşımada da fzf kullanımı
-
mv $(fzf) $(fzf)mv $(fzf) $(fzf), neyi taşıyacağınızı ve nereye taşıyacağınızı tam hatırlamadığınız, ancak her ikisi için de oldukça belirgin ipuçlarına sahip olduğunuz durumlarda işe yarar- Yöntem, iki ayrı
fzfseçimiyle taşınacak öğeyi ve hedefi belirlemeye dayanır - GitHub README'sine GIF yerleştirmek gibi dosyaları taşıyıp düzenleme işlerinde sık kullanılabilir
- İlgili bir örnek olarak
finstemetkileşimli kip README'si bağlantısı verilir
rg ile birleştirip dosya içeriğinde de bulanık arama
-
rg: özyinelemeli aramayı varsayılan yapan hızlıgrep- Aşağıdaki birleşim
grepile de yapılabilir, ancakrgya daripgrepözyinelemeli aramayı varsayılan sunduğu için bu kullanımda daha güçlüdür - Örnekleri takip etmek için
rgkurup kullanmanız önerilir
- Aşağıdaki birleşim
-
rg . | fzfrg ., dosyaların her satırını arama sonucu olarak çıktılar; bunufzfye verdiğinizde tüm dosyaların tüm satırlarında bulanık arama yapabilirsiniz- Böylece dosya adlarına göre değil, dosyaların içindeki satır içeriklerine dair ipuçlarıyla arama yapmış olursunuz
-
rg . | fzf | cut -d ":" -f 1rg . | fzfile seçilen sonucacut -d ":" -f 1eklerseniz, iki nokta üst üste ayıracına 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 dosya yolunu elde eder
-
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çan bir birleşimdir- Dosya adını hatırlamadığınız ama içeriğinin bir kısmını anımsadığınız durumlarda, doğrudan editöre geçiş yapabilirsiniz
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