Menguasai navigasi dan keybindings dasar fzf: bergerak di daftar item dengan vim-style keys dan jump mode, mengedit query dengan shortcut readline, hingga memilih dan keluar dengan benar termasuk multi-select.

Setelah di episode 4 kalian merancang tampilan fzf — height, layout, border, prompt, hingga warna — sekarang saatnya belajar bergerak cepat di dalamnya. Episode ini membahas navigasi & keybindings dasar: cara menjelajahi daftar item, cara mengedit query yang sedang diketik, dan cara memilih lalu keluar dengan benar — termasuk mode multi-select.
Satu prinsip akan menyatukan semuanya: fzf mengadopsi dua bahasa yang sudah kalian kenal. Untuk bergerak di daftar, fzf memakai bahasa Vim (j/k). Untuk mengedit query, fzf memakai bahasa readline (Ctrl+A, Ctrl+E, dan seterusnya) — bahasa yang sama dengan shell kalian. Kalau kalian sudah nyaman di salah satunya, setengah pekerjaan sudah selesai.
Antarmuka fzf memiliki dua wilayah yang responnya berbeda terhadap tombol: daftar item dan query. Ketika fokus ada di daftar, tombol j/k memindahkan pointer; ketika kalian mengetik, tombol yang sama masuk ke query sebagai huruf. Inilah kenapa fzf terasa "pintar": kalian tidak perlu menekan tombol mode untuk berpindah antara mengetik dan bernavigasi — kalian cukup mengetik untuk mencari, dan menekan tombol panah saat ingin bergerak di hasil.
printf "episode-0\nepisode-1\nepisode-2\nepisode-3\nepisode-4\nepisode-5\n" | fzf --height=40% --borderGunakan dataset di atas untuk mencoba semua keybinding di episode ini. Ketik episode untuk mempersempit daftar, lalu gerakkan pointer — sekarang kalian sedang berlatih di dua wilayah sekaligus.
Keybinding berikut menggerakkan pointer di daftar item:
| Tombol | Fungsi |
|---|---|
j / Ctrl+J | Pindah ke item berikutnya (bawah) |
k / Ctrl+K | Pindah ke item sebelumnya (atas) |
PageUp | Lompat ke atas satu halaman |
PageDown | Lompat ke bawah satu halaman |
Home | Langsung ke item pertama |
End | Langsung ke item terakhir |
Ctrl+Space | Masuk mode jump |
Perhatikan bahwa Ctrl+J dan Ctrl+K adalah padanan dari j dan k — berguna di terminal yang mengubah Ctrl+J menjadi newline. Saat daftar hanya tersisa sedikit item, j/k terasa paling nyaman; saat daftar panjang, PageDown dan End jauh lebih efisien daripada menekan j dua puluh kali.
Ada satu fitur yang sering terlewat padahal sangat kuat: jump mode, diaktifkan dengan Ctrl+Space. Setelah diaktifkan, fzf menampilkan label huruf di depan tiap item yang terlihat — mirip easy-motion di Vim:
| Input | Fungsi |
|---|---|
Ctrl+Space | Masuk jump mode; tampilkan label huruf di depan item |
a-z | Langsung lompat ke item berlabel huruf tersebut |
Begitu jump mode aktif, ketik huruf yang tampil di depan item tujuan — pointer langsung melompat ke sana tanpa perlu menekan panah berulang-ulang. Untuk daftar panjang yang sudah disaring jadi beberapa item, jump mode mengubah dua puluh penekanan tombol menjadi satu. Custom keybindings untuk varian jump-accept (lompat sekaligus terima) akan kita pelajari di episode yang membahas custom keybindings.
Untuk merasakan bedanya, coba pada dataset latihan di atas: tanpa jump mode, tekan End lalu k empat kali untuk mencapai item kedua; dengan jump mode, tekan Ctrl+Space lalu satu huruf. Sekali terasa, jump mode akan menjadi refleks.
Query di fzf berperilaku seperti baris perintah mini — dan di sinilah bahasa readline berperan:
| Tombol | Fungsi |
|---|---|
Ctrl+A | Pindah kursor ke awal query |
Ctrl+E | Pindah kursor ke akhir query |
Ctrl+F | Maju satu karakter |
Ctrl+B | Mundur satu karakter |
Ctrl+U | Hapus dari kursor sampai awal query |
Ctrl+W | Hapus satu kata di belakang kursor |
Ctrl+Y | Tempel kembali (yank) hasil hapusan |
printf "build\nbuild-images\nbuild-cache\nbuildx\n" | fzf --height=40% --borderCoba ketik build-cache, lalu tekan Ctrl+A (kursor ke awal), Ctrl+W (hapus kata pertama, build-), lalu Ctrl+Y untuk menempelkannya kembali. Ctrl+U menghapus seluruh query sekaligus — cara tercepat untuk memulai dari nol — dan Ctrl+Y mengembalikannya jika kalian berubah pikiran. Kombinasi ini terasa seperti mengetik di shell biasa, karena memang itu bahasanya.
Setelah item yang diinginkan aktif, waktunya memilih dan keluar. Empat tombol paling penting di seluruh fzf:
| Tombol | Fungsi |
|---|---|
Enter | Terima item aktif; cetak ke stdout; keluar dengan kode 0 |
Esc | Batalkan tanpa memilih; keluar dengan kode 1 |
Ctrl+C | Interupsi; keluar dengan kode 130 |
Tab | Toggle pilih item aktif (butuh mode multi-select) |
Shift+Tab | Toggle hapus item aktif dari pilihan |
Ingat bahasa exit code dari episode 2? Di sinilah ia beraksi: Enter berarti 0 (ada yang dipilih), Esc berarti 1 (tidak ada yang dipilih), dan Ctrl+C berarti 130 (dibatalkan). Script yang memakai fzf || exit 1 mengandalkan perbedaan ini untuk mengambil keputusan.
Untuk memilih lebih dari satu item, fzf harus dijalankan dengan opsi --multi:
printf "a\nb\nc\nd\n" | fzf --multi --height=40% --borderSekarang Tab menandai item aktif sebagai terpilih (ditandai dengan simbol marker yang kita atur di episode 4), dan Shift+Tab membatalkan tanda tersebut. Setelah menekan Enter, fzf mencetak semua item terpilih — satu per baris — ke stdout, siap diteruskan ke perintah berikutnya, misalnya fzf --multi | xargs rm. Berhati-hatilah dengan perintah terakhir itu: sekali Enter, tidak ada tombol undo.
Tip
Urutan kerja multi-select yang sering dipakai: ketik pola untuk menyaring, tekan Tab pada beberapa item yang diinginkan, tekan Enter untuk mengumpulkan semuanya. Jika salah tanda, Shift+Tab membatalkan — dan Ctrl+U pada query tidak akan menyelamatkan pilihan yang sudah ditandai, karena pilihan terpisah dari query.
Pada episode 5 ini, kalian telah menguasai navigasi dan keybindings dasar fzf: dua wilayah fokus (daftar dan query), navigasi dengan j/k, PageUp/PageDown, Home/End, dan jump mode lewat Ctrl+Space, pengeditan query dengan shortcut readline (Ctrl+A/E, Ctrl+U/W, Ctrl+F/B, Ctrl+Y), serta cara memilih dan keluar dengan Enter, Esc, Ctrl+C, Tab, dan Shift+Tab.
Inti yang harus dibawa pulang:
j/k atau Ctrl+J/Ctrl+K untuk langkah halus, PageUp/PageDown untuk lompat, Ctrl+Space untuk jump mode.Ctrl+A/E ke ujung, Ctrl+U/W hapus, Ctrl+Y tempel kembali — bahasa readline.Enter (kode 0), Esc (kode 1), Ctrl+C (kode 130).Tab tandai, Shift+Tab batalkan, butuh opsi --multi.Di episode 6 selanjutnya, kita akan membahas multi-select transformasi & ANSI — cara memanfaatkan pilihan banyak item dengan transformasi output dan menangani teks berwarna (ANSI) di dalam daftar. Sampai jumpa di episode 6!