Saya sudah memasang `fzf`. Sekarang harus ngapain? (2023)
(andrew-quinn.me)- Fuzzy finder baris perintah
fzfmemberi dampak yang langsung terasa dan nilai unik dibanding usaha yang dikeluarkan, tetapi banyak developer hanya memasangnya lalu menyerah karena tidak tahu cara memakainya - Mengganti pencarian riwayat
Ctrl+Rdengan fuzzy matching dan banyak pratinjau sehingga mengatasi ketidaknyamanan pendekatan lama yang mengandalkan kecocokan string yang persis - Dengan
Alt+C, Anda bisa melakukan fuzzy cd meski hanya samar mengingat nama direktori, dan membangun workflow untuk langsung membuka file dengan kombinasivi $(fzf) - Jika dihubungkan dengan
ripgreplewat pipe, Anda bisa melakukan fuzzy search pada setiap baris di semua file lalu langsung membuka file tersebut di editor - Alat ini meningkatkan produktivitas begitu cepat sampai-sampai bahkan heuristik 80/20 yang biasanya menyarankan mempelajari alat Unix lama lebih dulu pun jadi terasa kurang relevan
Nilai yang bisa langsung didapat setelah memasang fzf
- Software engineer mudah membuat alat untuk memperbaiki pekerjaannya sendiri, tetapi jika terus berpindah-pindah antar alat tanpa mendalaminya, biayanya akan makin besar seiring waktu
- Heuristik 80/20 yang baik adalah mempelajari dulu alat Unix lama seperti
cat,ls,cd,grep,cut, dan dalam peran administrasi sistem modern ini juga mencakupseddanawk fzfbisa dianggap pengecualian terhadap heuristik ini karena dampaknya langsung terasa dan nilainya cukup unik- Intinya adalah fitur-fitur yang bisa langsung dipakai setelah memasang dengan skrip instalasi
fzfpada lingkungan Ubuntu standar
Efek instan dari shortcut bawaan
-
Ctrl+R: mengubah riwayat perintah menjadi pencarian fuzzy- Di sebagian besar terminal Linux dan Windows,
Ctrl+Rmenyediakan pencarian mundur untuk perintah Ctrl+Rbawaan membutuhkan kecocokan yang persis untuk menemukan perintah yang diinginkan, dan hanya menampilkan satu pratinjau dalam satu waktu sehingga satu karakter meleset saja bisa membuatnya sulit ditemukan- Setelah memasang
fzf, beberapa shortcut keyboard ditimpa dengan perilaku yang lebih baik, danCtrl+Rjuga jauh meningkat dibanding cara lama - Jika dipasang lewat package manager seperti
apt, integrasi shortcut ini mungkin tidak tersedia, dan itulah alasan memakai skrip instalasifzf
- Di sebagian besar terminal Linux dan Windows,
-
Alt+C: cepat berpindah ke direktori yang hanya samar diingatfzfmengubahAlt+Cmenjadi shortcutcdfuzzy yang ditingkatkan- Anda bisa cepat berpindah saat tidak ingat path direktori secara persis dan hanya ingat nama kasarnya saja
- Berguna saat mencari repo atau direktori kerja yang sudah lama tidak dikunjungi dari terminal kosong
Perintah fzf itu sendiri dan kombinasinya dengan shell
-
fzfdasar- Menjalankan perintah
fzfapa adanya akan melakukan pencarian fuzzy pada path file relatif berdasarkan direktori saat ini - Jika dipakai sendiri, kegunaannya tidak terlalu besar selain sekadar memilih lokasi file
- Menjalankan perintah
-
vi $(fzf)- Jika digabung dengan command substitution seperti
vi $(fzf), file yang dipilih lewat pencarian fuzzy bisa langsung dibuka di editor - Cara ini tidak khusus untuk
vi; Anda juga bisa memakainya dengan editor pilihan sepertiemacs,nano,code, dan lainnya
- Jika digabung dengan command substitution seperti
-
vi $(find . '/' | fzf)- Jika
find . '/' | fzfdigabung dengan editor, Anda bisa melakukan pencarian fuzzy di seluruh kandidat path untuk membuka file konfigurasi yang lokasinya tidak diketahui - Saat mencari file seperti
nginx.confyang lokasinya tidak Anda ingat, Anda tidak perlu menebak-nebak berdasarkan pengetahuan FHS atau menghafalnya; cukup pipe hasilfindkefzf - Jika mencari dengan
conf$, Anda bisa memfilter hanya baris yang berakhir denganconf - Jika
findmenemui banyak errorPermission denied,fzfbisa tampak goyah sebentar tetapi akan pulih beberapa detik kemudian - Penundaan beberapa detik seperti ini adalah trade-off untuk kemudahan menemukan file konfigurasi dengan cara yang sangat sederhana
- Jika
-
vi **<TAB>- Fitur dari komentar Hacker News milik
sigmonsaysini berada di tengah-tengah antara penimpaan shortcut dan menjalankanfzfsecara langsung, yaitu tab completion fuzzy dengan dua tanda bintang vi **<TAB>bisa dipakai untuk memilih file dengan cara yang miripvi $(fzf)- Setelah perintah benar-benar lengkap, Anda masih harus menekan
Entersekali lagi - Ini berjalan baik di bash dan zsh, tetapi di
fishkadang tidak berfungsi - Jika Anda lebih mudah mengingat cara yang secara eksplisit memanggil
$(fzf), mungkin fitur ini tidak akan terlalu sering dipakai
- Fitur dari komentar Hacker News milik
fzf untuk memindahkan file juga
-
mv $(fzf) $(fzf)mv $(fzf) $(fzf)berguna saat Anda tidak ingat persis apa yang ingin dipindahkan dan ke mana tujuannya, tetapi masih ingat petunjuk yang sangat spesifik untuk masing-masing- Caranya adalah memilih objek yang akan dipindah dan tujuannya lewat dua kali pemilihan
fzf - Ini bisa sering terpakai saat menata file, misalnya ketika menambahkan GIF ke README GitHub
- Sebagai contoh terkait, ada README interactive mode milik
finstem
Menggabungkan dengan rg untuk fuzzy search hingga isi file
-
rg:grepcepat dengan pencarian rekursif sebagai default- Kombinasi di bawah ini juga bisa dilakukan dengan
grep, tetapirgatauripgrepunggul untuk penggunaan ini karena pencarian rekursif adalah perilaku default-nya - Jika ingin mengikuti contohnya, disarankan memasang dan memakai
rg
- Kombinasi di bawah ini juga bisa dilakukan dengan
-
rg . | fzfrg .mengeluarkan setiap baris dari file sebagai hasil pencarian, lalu jika diteruskan kefzf, Anda bisa melakukan pencarian fuzzy pada setiap baris di semua file- Artinya, petunjuk pencariannya bukan nama file, melainkan isi baris di dalam file
-
rg . | fzf | cut -d ":" -f 1- Jika hasil yang dipilih dari
rg . | fzfditambahcut -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
- Jika hasil yang dipilih dari
-
vim $(rg . | fzf | cut -d ":" -f 1)vim $(rg . | fzf | cut -d ":" -f 1)adalah kombinasi untuk melakukan pencarian fuzzy pada setiap baris di semua file, lalu membuka file yang memuat baris terpilih denganvim- Saat Anda tidak ingat nama file tetapi masih ingat sebagian isinya, alur ini memungkinkan Anda 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