1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Segera setelah dipasang, fzf meningkatkan pencarian riwayat perintah Ctrl+R menjadi pencarian fuzzy
  • Dengan Alt+C, Anda bisa cepat berpindah ke direktori kerja lama tanpa harus tahu path yang persis
  • Perintah fzf bisa digabungkan dengan substitusi perintah untuk langsung membuka file terpilih di vi, emacs, atau code
  • Jika hasil find diteruskan ke fzf, file konfigurasi yang lokasinya tidak diketahui seperti nginx.conf jadi lebih mudah ditemukan
  • rg. | fzf memungkinkan Anda membuka file yang diinginkan dengan petunjuk berupa baris isi file, bukan nama file

Nilai yang langsung didapat setelah memasang fzf

  • Insinyur perangkat lunak bisa dengan mudah membuat alat untuk memperbaiki alur kerjanya sendiri, tetapi jika terus berpindah-pindah alat tanpa benar-benar mendalaminya, biayanya akan makin besar seiring waktu
  • Heuristik 80/20 yang bagus adalah mempelajari dulu alat Unix lama seperti cat, ls, cd, grep, cut, dan dalam peran administrasi sistem modern ini juga mencakup sed dan awk
  • fzf bisa dianggap pengecualian dari heuristik ini karena manfaatnya langsung terasa dibanding usaha yang dikeluarkan, dan nilainya cukup unik
  • Intinya adalah fitur-fitur yang bisa langsung dipakai setelah pemasangan lewat skrip instalasi fzf di lingkungan Ubuntu standar

Efek instan dari shortcut bawaan

  • Ctrl+R: mengubah riwayat perintah menjadi pencarian fuzzy

    • Di sebagian besar terminal Linux dan Windows, Ctrl+R menyediakan pencarian mundur untuk perintah
    • Ctrl+R bawaan memerlukan kecocokan yang tepat untuk menemukan perintah yang diinginkan, dan hanya menampilkan satu pratinjau pada satu waktu sehingga sedikit salah ketik saja bisa membuat pencarian sulit
    • Saat fzf dipasang, beberapa shortcut keyboard ditimpa dengan perilaku yang lebih baik, dan Ctrl+R termasuk yang sangat ditingkatkan dibanding cara lama
    • Jika dipasang lewat manajer paket seperti apt, integrasi shortcut ini mungkin tidak tersedia, itulah alasan memakai skrip instalasi fzf
  • Alt+C: cepat pindah ke direktori yang samar di ingatan

    • fzf mengubah Alt+C menjadi shortcut cd fuzzy yang lebih kuat
    • Ini memungkinkan Anda cepat berpindah saat tidak ingat path direktori yang tepat dan hanya ingat nama kasarnya
    • Berguna saat mencari repositori atau direktori kerja yang sudah lama tidak dikunjungi dari terminal kosong

Perintah fzf itu sendiri dan kombinasinya dengan shell

  • fzf dasar

    • Menjalankan perintah fzf apa adanya akan melakukan pencarian fuzzy atas path file relatif berdasarkan direktori saat ini
    • Jika berdiri sendiri, kegunaannya tidak terlalu besar selain memilih lokasi file
  • vi $(fzf)

    • Jika digabung dengan substitusi perintah seperti vi $(fzf), file yang dipilih lewat pencarian fuzzy bisa langsung dibuka di editor
    • Cara ini tidak khusus untuk vi; bisa juga dipakai dengan editor pilihan seperti emacs, nano, code, dan lainnya
  • vi $(find . '/' | fzf)

    • Jika find . '/' | fzf digabungkan dengan editor, Anda bisa membuka file konfigurasi yang lokasinya tidak diketahui dengan melakukan pencarian fuzzy pada kandidat path lengkap
    • Saat mencari file seperti nginx.conf yang lokasinya sudah lupa, Anda tidak perlu menebak berdasarkan pengetahuan FHS atau menghafalkannya; cukup pipe hasil find ke fzf
    • Jika mencari dengan pola seperti conf$, Anda bisa memfilter hanya baris yang berakhir dengan conf
    • Jika find menemui banyak error Permission denied, fzf bisa sempat tersendat tetapi akan pulih beberapa detik kemudian
    • Jeda beberapa detik ini adalah trade-off demi kemudahan menemukan file konfigurasi dengan cara yang sangat sederhana
  • vi **<TAB>

    • Fitur yang berasal dari komentar Hacker News oleh sigmonsays ini berada di tengah antara penimpaan shortcut dan menjalankan fzf secara langsung: penyelesaian tab fuzzy dengan dua tanda bintang
    • vi **<TAB> bisa dipakai untuk memilih file dengan cara yang mirip vi $(fzf)
    • Setelah perintah benar-benar selesai dilengkapi, Anda masih harus menekan Enter sekali lagi
    • Ini bekerja baik di bash dan zsh, tetapi kadang tidak bekerja di fish
    • Jika cara memanggil $(fzf) secara eksplisit terasa lebih mudah diingat, Anda mungkin tidak akan terlalu sering memakai fitur ini

fzf juga dipakai untuk memindahkan file

  • mv $(fzf) $(fzf)

    • mv $(fzf) $(fzf) berguna saat Anda tidak ingat persis apa yang mau dipindahkan dan ke mana, tetapi masih ingat petunjuk yang sangat spesifik untuk masing-masingnya
    • Caranya adalah memilih target yang dipindahkan dan tujuan dengan dua kali pemilihan fzf
    • Ini bisa sering dipakai saat memindahkan dan menata file, misalnya ketika menambahkan GIF ke README GitHub
    • Sebagai contoh terkait, terhubung ke README mode interaktif finstem

Pencarian fuzzy sampai ke isi file dengan gabungan rg

  • rg: grep cepat dengan pencarian rekursif sebagai bawaan

    • Kombinasi di bawah ini juga bisa dilakukan dengan grep, tetapi rg atau ripgrep lebih unggul untuk penggunaan ini karena pencarian rekursif adalah perilaku bawaannya
    • Untuk mengikuti contoh, disarankan memasang dan memakai rg
  • rg . | fzf

    • rg . mengeluarkan setiap baris dari file sebagai hasil pencarian, dan jika diteruskan ke fzf, Anda bisa melakukan pencarian fuzzy pada semua baris dari semua file
    • Ini berarti petunjuk pencariannya bukan nama file, melainkan isi baris di dalam file
  • rg . | fzf | cut -d ":" -f 1

    • Jika hasil yang dipilih dari rg . | fzf ditambah cut -d ":" -f 1, Anda bisa mengembalikan field pertama berdasarkan titik dua, yaitu lokasi file
    • Ini adalah kombinasi untuk melakukan pencarian fuzzy pada isi baris lalu hanya mengambil path file yang memuat baris tersebut
  • vim $(rg . | fzf | cut -d ":" -f 1)

    • vim $(rg . | fzf | cut -d ":" -f 1) adalah kombinasi untuk melakukan pencarian fuzzy pada semua baris dari semua file, lalu membuka file yang memuat baris terpilih dengan vim
    • Saat Anda tidak ingat nama file tetapi masih ingat sebagian isinya, alur ini memungkinkan langsung lanjut ke editor

1 komentar

 
GN⁺ 4 jam lalu
Pendapat Lobste.rs
  • Rasanya pembaca sasaran tulisan ini memang tepat seperti saya. Saya memasang fzf, berpikir “wah, jenius”, lalu justru terus lupa memakainya, tapi sekarang mungkin saya akan mulai memakainya

    • Intinya adalah mengintegrasikannya ke konfigurasi shell yang sudah ada, skrip pribadi, dan alias. Saya selalu memakai fzf, tetapi hampir tidak pernah menjalankannya secara langsung
  • Ini mungkin tulisan yang bagus, tetapi kalau tujuannya menjawab “sekarang harus ngapain?”, memulai dari integrasi shell fzf malah terasa seperti menyasar pembaca yang lebih sempit
    Saya sudah terbiasa memakai ctrl-r di bash, jadi menyuruh menggantinya terasa menuntut terlalu banyak. Seharusnya dijelaskan dulu cara melatih perilaku yang sama tanpa mengganti default-nya

    • Sebenarnya ini lebih mirip default yang ditingkatkan. Memang sebaiknya dibiarkan menggantikan ctrl-r, dan setengah dari daya tarik utamanya adalah mempertahankan kebiasaan yang sudah melekat di tangan sambil mendapatkan pengalaman yang lebih kaya dengan alur yang nyaris sama seperti sebelumnya
      ctrl-r mungkin adalah perintah yang paling sering saya pakai, dan fzf adalah peningkatan yang langsung pas tanpa kurva belajar. Karena dijalankan lewat ctrl-r, saya juga jadi tidak lupa memakai fzf. Namun belakangan saya pindah ke Fish shell, dan di sana perilaku yang sama sudah tersedia secara bawaan
  • Saya sudah yakin. Saya akan segera menambahkan fzf dan integrasi shell-nya, dan hari ini saya belajar sesuatu

  • Saat mencari file untuk dimasukkan ke perintah, Anda juga bisa memakai shortcut ctrl-t. Saya sering memakainya bersama git saat memilih file yang akan dimasukkan ke perubahan tertentu, dan juga pernah memakainya untuk menyaring hasil keluaran grep agar mempersempit cakupan pencarian

  • Selain peningkatan pencarian riwayat shell, saya juga memakai fzf bersama dua alias berikut
    alias gbd='git -c color.ui=never branch | fzf | xargs -I {} git branch -D {}'
    Saya terutama memakainya untuk memilih daftar branch lokal yang akan dihapus setelah merge pull request. Mungkin ada cara yang lebih baik, tetapi sejauh ini belum pernah gagal
    alias awp='export AWS_PROFILE="$(grep -e "\[\(.*\)\]" ~/.aws/config | sed -e "s/\[//g" | sed -e "s/\]//g" | cut -d " " -f 2 | sort -u | fzf)"'
    Ini memungkinkan saya mengganti AWS_PROFILE dengan cepat berdasarkan nilai yang ada di ~/.aws/config. Sekarang saya jadi berpikir untuk membuat alias serupa guna mengganti namespace Kubernetes

  • Jika memakai plugin fzf.vim, Anda bisa menggunakan fzf di dalam vim. Bukan hanya untuk membuka file, tetapi juga untuk melakukan pencarian fuzzy pada buffer, riwayat perintah, isi file, dan lain-lain

  • Kegunaan utama fzf bagi saya adalah menelusuri dan mencari riwayat commit Git yang linear untuk memahami apa yang baru-baru ini berubah
    Di konfigurasi Git default saya, git fzf didefinisikan seperti ini

    [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})' #"  
    
  • Rasanya saya melewatkan sesuatu. Saya penasaran kenapa orang memasang fzf kalau bahkan belum tahu mau dipakai untuk apa

  • Ada juga tulisan terkait yang baru-baru ini muncul. Seorang pengguna memakai fzf sebagai pemilih file untuk jj
    https://lobste.rs/s/exlogg/jjj