Memasang fzf langsung ke dalam shell dengan keybindings bawaan: CTRL-T untuk memilih file atau direktori, CTRL-R untuk mencari riwayat perintah, dan ALT-C untuk berpindah direktori, lengkap dengan kustomisasi dan cara menonaktifkannya.

Sejauh ini kalian memanggil fzf secara eksplisit: mengetik cat daftar.txt | fzf, memilih, lalu meneruskan hasilnya. Episode 7 menghilangkan langkah manual itu dengan shell integration — fzf menyatu dengan shell, muncul lewat keybinding, dan memanfaatkan sumber data yang sudah ada: filesystem, riwayat perintah, dan direktori. Fondasinya satu baris: eval "$(fzf --bash)".
Ini adalah perubahan paradigma, bukan sekadar fitur tambahan. Setelah episode ini, kalian tidak akan pernah lagi menekan panah atas berulang-ulang untuk mencari perintah lama, atau mengetik path panjang untuk membuka file. Fzf menjadi bagian dari cara kalian mengetik.
Shell integration membuat fzf berperan sebagai widget yang hidup di dalam shell kalian — seperti autocomplete cerdas yang bisa dipanggil kapan saja. Fzf menghasilkan script integrasi khusus per shell, dan kalian mengevaluasinya sekali di file konfigurasi. Script ini mendaftarkan tiga keybinding inti:
| Keybinding | Fungsi |
|---|---|
CTRL-T | Menampilkan file & direktori; path hasil ditempel ke baris perintah |
CTRL-R | Mencari riwayat perintah yang pernah dijalankan |
ALT-C | Menampilkan direktori; hasilnya langsung menjadi cd |
Bayangkan CTRL-R sebagai mesin waktu untuk perintah: alih-alih menelusuri history dengan panah atas, kalian mengetik kata kunci dan memfilter ribuan baris riwayat dalam sekejap. Begitu pula CTRL-T — Spotlight-nya shell untuk file di sekitar kalian.
Fzf menyediakan flag untuk masing-masing shell. Polanya selalu sama: minta fzf mencetak script, lalu muat hasilnya.
eval "$(fzf --bash)"Letakkan baris integrasi di file konfigurasi shell kalian — ~/.bashrc, ~/.zshrc, atau ~/.config/fish/config.fish — setelah definisi variabel FZF_* (yang akan kita bahas di episode 8), agar nilai tersebut dibaca saat script integrasi dimuat. Setelahnya, buka terminal baru dan coba CTRL-R sekali; kalian akan melihat fzf melayang di atas riwayat perintah.
Tip
Script integrasi dievaluasi setiap kali shell baru dibuka, bukan saat fzf dijalankan. Karena itu perubahan pada FZF_CTRL_T_COMMAND atau sejenisnya baru berlaku di sesi shell berikutnya — ingat source ~/.bashrc setelah mengedit.
CTRL-T adalah keybinding paling sering dipakai. Saat ditekan, fzf menampilkan file (dan direktori) di bawah direktori kerja, dan path hasilnya disisipkan ke baris perintah yang sedang kalian ketik. Contoh alur nyata:
nvim <tekan CTRL-T>Kalian mengetik nvim lalu menekan CTRL-T — muncul daftar file, pilih satu dengan fuzzy search, dan baris perintah menjadi nvim path/ke/file. Tidak ada salah ketik path, tidak ada Tab yang berantakan dengan autocomplete bawaan.
Sumber daftar defaultnya adalah perintah bawaan fzf (walking directory), tapi kalian bisa menggantinya lewat FZF_CTRL_T_COMMAND. Ini berguna untuk menyaring jenis file, misalnya hanya Markdown:
export FZF_CTRL_T_COMMAND="find . -name '*.md' -type f"Note
Sejak fzf 0.48, integrasi shell bawaan sudah menyertakan preview otomatis untuk CTRL-T dan ALT-C: file yang sedang disorot langsung diperlihatkan isinya di jendela preview tanpa konfigurasi tambahan. Ini alasan penting untuk selalu memperbarui fzf kalian.
CTRL-R menggantikan pencarian history bawaan shell yang biasanya linier (panah atas) atau berbasis awalan (Ctrl-R bash klasik). Dengan fzf, riwayat menjadi daftar yang bisa difilter fuzzy: ketik docker build, dan semua baris history yang mengandung keduanya muncul, dipilih yang terbaik.
Karena riwayat adalah sumber data yang tetap, tidak ada FZF_CTRL_R_COMMAND — tapi kalian bisa menyesuaikan perilakunya dengan FZF_CTRL_R_OPTS:
export FZF_CTRL_R_OPTS="--scheme=history --sort"--scheme=history mengoptimalkan penilaian skor untuk data berurutan waktu (kebetulan yang muncul belakangan di history dihargai lebih), dan --sort memastikan hasil terurut relevan, bukan urutan kemunculan. Detail --scheme akan kita bedah di episode tentang optimasi pencarian.
Caution
Riwayat bisa berisi rahasia: token, password, string koneksi. CTRL-R menampilkan semuanya dengan mudah — pastikan kebiasaan kalian tidak mengetik kredensial mentah di baris perintah, atau bersihkan history secara berkala dengan history -c (bash) dan fc -W/hapus ~/.zsh_history.
ALT-C melakukan cd berbasis fuzzy: menampilkan daftar direktori, dan begitu satu dipilih, shell langsung berpindah ke sana. Bayangkan menuju ~/proyek/belajar-fzf/episode-7 dari mana pun hanya dengan mengetik beberapa huruf — tidak perlu menyalin path, tidak perlu cd .. berulang.
Seperti CTRL-T, sumber datanya bisa dikustomisasi dengan FZF_ALT_C_COMMAND, dan perilakunya dengan FZF_ALT_C_OPTS:
export FZF_ALT_C_COMMAND="find . -type d -not -path '*/node_modules/*' -not -path '*/.git/*'"
export FZF_ALT_C_OPTS="--preview 'ls -la'"Contoh di atas memfilter direktori node_modules dan .git agar daftar cd tetap bersih, serta menampilkan isi direktori yang sedang disorot di preview — sehingga kalian tidak menebak-nebak isinya.
Ada dua tingkatan "mematikan": menonaktifkan seluruh integrasi, atau menonaktifkan keybinding tertentu.
Untuk mematikan seluruhnya, cukup jangan memuat baris integrasi di config — hapus atau komentari baris eval/source integrasi tersebut. Semua keybinding fzf hilang, dan shell kembali normal.
Untuk mematikan satu keybinding saja (misal CTRL-T berbenturan dengan kebiasaan kalian):
| Shell | Perintah |
|---|---|
| Bash | bind -r '"\C-t"' |
| Zsh | bindkey -r '^T' |
| Fish | bind -e fzf-file-widget |
Baris-baris ini bisa diletakkan di config setelah integrasi dimuat. Nama widget di fish: fzf-file-widget untuk CTRL-T, fzf-history-widget untuk CTRL-R, dan fzf-cd-widget untuk ALT-C.
Important
Menonaktifkan integrasi juga menonaktifkan fuzzy completion (**<TAB>) yang akan kita bahas di episode 9 — karena keduanya dipasang dari script yang sama. Jika kalian hanya ingin menonaktifkan preview bawaan CTRL-T/ALT-C, set FZF_CTRL_T_OPTS atau FZF_ALT_C_OPTS dengan nilai kosong atau --no-preview, tanpa harus mematikan keybinding.
Episode 7 ini memasang fzf ke dalam shell kalian: integrasi per shell (bash, zsh, fish, nushell), tiga keybinding inti (CTRL-T untuk file/direktori, CTRL-R untuk riwayat, ALT-C untuk cd), kustomisasi lewat FZF_CTRL_T_COMMAND, FZF_CTRL_R_OPTS, dan FZF_ALT_C_*, serta cara menonaktifkannya baik sebagian maupun seluruhnya.
Inti yang harus dibawa pulang:
eval/source di config shell.CTRL-T memilih file, CTRL-R mencari history, ALT-C berpindah direktori.CTRL-T/ALT-C sudah aktif sejak fzf 0.48.FZF_*.Di episode 8, kita akan menarik semua variabel FZF_* itu ke permukaan: environment variables & default options — FZF_DEFAULT_COMMAND, FZF_DEFAULT_OPTS, dan pola konfigurasi terbaik agar seluruh pengaturan fzf kalian konsisten di satu tempat. Sampai jumpa di episode 8!