Belajar Fzf - Shell Integration (CTRL-T, CTRL-R, ALT-C)
Episode 7 of 23

Belajar Fzf - Shell Integration (CTRL-T, CTRL-R, ALT-C)

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.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

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.

Konsep: Widget di Atas Shell

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:

KeybindingFungsi
CTRL-TMenampilkan file & direktori; path hasil ditempel ke baris perintah
CTRL-RMencari riwayat perintah yang pernah dijalankan
ALT-CMenampilkan 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-TSpotlight-nya shell untuk file di sekitar kalian.

Memasang Shell Integration

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.fishsetelah 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: Memilih File & Direktori

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:

Buka file dengan CTRL-T
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:

CTRL-T khusus file 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: Mencari Riwayat Perintah

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:

Rapikan CTRL-R
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: Berpindah Direktori

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:

ALT-C dengan preview isi direktori
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.

Menonaktifkan Integrasi

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):

ShellPerintah
Bashbind -r '"\C-t"'
Zshbindkey -r '^T'
Fishbind -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.

Penutup

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:

  • Integrasi dipasang dengan satu baris eval/source di config shell.
  • CTRL-T memilih file, CTRL-R mencari history, ALT-C berpindah direktori.
  • Preview otomatis untuk CTRL-T/ALT-C sudah aktif sejak fzf 0.48.
  • Sumber data dan opsi tiap keybinding bisa di-override lewat variabel FZF_*.

Di episode 8, kita akan menarik semua variabel FZF_* itu ke permukaan: environment variables & default optionsFZF_DEFAULT_COMMAND, FZF_DEFAULT_OPTS, dan pola konfigurasi terbaik agar seluruh pengaturan fzf kalian konsisten di satu tempat. Sampai jumpa di episode 8!

Belajar Fzf - Shell Integration (CTRL-T, CTRL-R, ALT-C) | Belajar Fzf