- 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
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
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
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 bersamagitsaat memilih file yang akan dimasukkan ke perubahan tertentu, dan juga pernah memakainya untuk menyaring hasil keluarangrepagar mempersempit cakupan pencarianSelain peningkatan pencarian riwayat shell, saya juga memakai
fzfbersama dua alias berikutalias 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 KubernetesJika 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 fzfdidefinisikan seperti iniRasanya 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