22 puan yazan GN⁺ 2026-05-11 | 1 yorum | WhatsApp'ta paylaş
  • 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+R geç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ür
  • Alt+C ile dizin adını sadece kabaca hatırlasanız bile bulanık cd yapılabilir ve vi $(fzf) birleşimiyle dosyaları anında açan bir iş akışı kurulabilir
  • ripgrep ile 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, find vb.) ö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, cut gibi eski Unix araçlarını öğrenmektir; modern sistem yönetimi rollerinde buna sed ve awk da 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 fzf kurulum 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
    • fzf kurulduğunda çeşitli klavye kısayolları daha iyi davranışlarla geçersiz kılınır ve Ctrl+R da mevcut yaklaşıma göre ciddi biçimde iyileşir
    • apt gibi paket yöneticileriyle kurulum yapıldığında bu kısayol entegrasyonu gelmeyebilir; bu da fzf kurulum betiğini kullanmak için bir nedendir
  • Alt+C: tam hatırlamadığınız bir dizine hızla geçin

    • fzf, Alt+C kısayolunu geliştirilmiş bir bulanık cd kı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 fzf

    • fzf komutunu 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, code ve istediğiniz başka editörlerle de kullanılabilir
  • vi $(find . '/' | fzf)

    • find . '/' | fzf ifadesi 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çabilirsiniz
    • nginx.conf gibi 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 yeterlidir
    • conf$ gibi aramalarla conf ile biten satırları filtreleyebilirsiniz
    • find çok sayıda Permission denied hatasıyla karşılaşırsa fzf kı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>

    • sigmonsays adlı kullanıcının Hacker News yorumu ile öne çıkan bir özellik olarak, kısayol geçersiz kılmaları ile fzfyi doğrudan çalıştırmak arasında bir yerde duran, çift yıldızlı bulanık sekme tamamlama bulunur
    • vi **<TAB>, vi $(fzf)ye benzer şekilde dosya seçmek için kullanılabilir
    • Gerçek komut tamamlandıktan sonra ayrıca bir kez daha Enter tuşuna basmanız gerekir
    • bash ve zsh'de iyi çalışır, ancak fish iç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ı fzf seç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 finstem etkileş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 grep ile de yapılabilir, ancak rg ya da ripgrep özyinelemeli aramayı varsayılan sunduğu için bu kullanımda daha güçlüdür
    • Örnekleri takip etmek için rg kurup kullanmanız önerilir
  • rg . | fzf

    • rg ., dosyaların her satırını arama sonucu olarak çıktılar; bunu fzfye 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 1

    • rg . | fzf ile seçilen sonuca cut -d ":" -f 1 eklerseniz, 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ı vim ile 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

 
GN⁺ 2026-05-11
Lobste.rs görüşleri
  • Bu yazının hedef kitlesi tam benmişim gibi. fzf kurup “dahice” diye düşünmüş, ama sonra gerçekten kullanmayı sürekli unutmuştum; şimdi belki kullanırım

    • Asıl mesele bunu mevcut shell yapılandırmasına, kişisel script’lere ve alias’lara entegre etmek. fzfyi 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-r kullanmaya 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 isterdim

    • Aslında bu daha çok güçlendirilmiş bir varsayılan gibi. ctrl-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 eklemesinde
      ctrl-r muhtemelen en sık kullandığım komut ve fzf, öğrenme eğrisi olmadan anında yerine oturan bir iyileştirmeydi. ctrl-r ile çalıştığı için fzf kullanmayı 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 fzf ve shell entegrasyonunu ekleyeceğim; bugün bir şey öğrenmiş oldum

  • Komuta eklenecek dosyaları bulurken ctrl-t kısayolunu da kullanabilirsiniz. Belirli bir değişikliğe dahil edilecek dosyaları seçerken bunu git ile sık kullanıyorum; grep çıktısını filtreleyip aranacak kapsamı daraltmak için de kullandım

  • Shell geçmişi aramayı iyileştirmenin dışında, fzfyi şu iki alias ile de kullanıyorum
    alias 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/config iç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üyorum

  • fzf.vim eklentisini kullanırsanız vim içinde fzf kullanabilirsiniz. Sadece dosya açmak için değil, buffer'lar, komut geçmişi, dosya içerikleri gibi şeylerde de fuzzy search yapabilirsiniz

  • fzfnin ana kullanım alanı, doğrusal Git commit geçmişini gezip arayarak son zamanlarda nelerin değiştiğini anlamak
    Varsayılan Git yapılandırmamda git fzf şöyle tanımlı

    [alias]  
      # Browse commit history with fzf  
      # Inspired by: https://chrismanbrown.gitlab.io/67.html  
      fzf = "!git log --oneline --color=always --decorate=short $@ | \  
          fzf --ansi --reverse --no-sort \  
            --preview 'git show --color=always {1}' \  
            --preview-window '<50(down)' \  
            --bind 'enter:become(git show {1})' #"  
    
  • 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ı jj için dosya seçici olarak fzf kullanıyor
    https://lobste.rs/s/exlogg/jjj