Menguasai preview window: menyalakan dengan opsi preview, mengatur posisi dan ukuran jendela, memanfaatkan placeholder dinamis, hingga menampilkan isi file dengan bat, rich, gambar, dan aksi execute langsung dari fzf.

Episode 9 membuat fzf melengkapi perintah; episode 10 membuat fzf menjelaskan. Preview window adalah panel kedua di samping daftar yang menampilkan detail item yang sedang disorot — isi file, metadata, gambar, hingga output perintah lain — secara real-time. Satu contoh langsung: fzf --preview 'cat {}'.
Inilah fitur yang mengubah fzf dari pemilih buta menjadi pengintip yang terinformasi. Sebelum memilih file, kalian sudah melihat isinya; sebelum menjalankan proses, kalian sudah melihat kaitannya. Keputusan tidak lagi ditebak, melainkan diverifikasi dulu.
Preview window bekerja dengan prinsip sederhana: setiap kali pointer berpindah ke item baru, fzf menjalankan perintah preview untuk item itu dan menampilkan hasilnya. Perintah ini ditentukan dengan --preview, dan isi yang ditampilkan bisa berasal dari apa pun yang bisa dicetak perintah.
fzf --preview 'bat --color=always --style=numbers {}'Di sini {} adalah placeholder yang diganti dengan teks item yang sedang disorot. Saat kalian turun satu baris, bat dijalankan ulang untuk file di baris itu. Karena bat mendukung ANSI, gabungkan dengan --ansi dari episode 6 agar warnanya tampil: fzf --ansi --preview 'bat --color=always {}'.
--previewBentuk dasarnya --preview 'perintah {}' — fzf mengeksekusi perintah melalui shell untuk setiap item aktif. Tiga hal yang perlu diingat:
sh -c), sehingga pipeline seperti cat {} | head -50 sah.{} diganti dengan item yang sedang disorot, bukan yang sudah dipilih.Contoh preview metadata direktori menggunakan flag dari episode 6:
fzf --preview 'ls -la {}'--preview-windowPosisi, ukuran, dan perilaku panel diatur dengan --preview-window. Formatnya: POSISI,SIZE,FLAG. Beberapa kombinasi paling umum:
| Nilai | Efek |
|---|---|
right,50% | Di kanan, setengah lebar (default) |
up,30% | Di atas, 30% tinggi |
down,10 | Di bawah, 10 baris |
left | Di kiri |
wrap | Membungkus baris panjang (default: terpotong) |
hidden | Sembunyi dulu, muncul lewat toggle |
+{2} | Scroll awal mengikuti nomor baris di field 2 |
fzf --preview 'cat {}' --preview-window 'down,30%,wrap'Tip
Tombol CTRL-/ (atau F3) secara default men-toggle preview window: menyembunyikan dan menampilkannya kembali. Dengan --preview-window 'right,50%,hidden', preview tidak memakan ruang sampai kalian butuh — kombinasi yang nyaman untuk layar kecil.
Placeholder adalah jantung preview. Selain {}, fzf mengenali beberapa bentuk:
| Placeholder | Makna |
|---|---|
{} | Seluruh teks item yang sedang disorot |
{1} | Field pertama item (pakai --delimiter) |
{q} | Teks query yang sedang diketik |
{n} | Nomor urut item (berbasis nol) |
{+} | Semua item yang dipilih multi-select, dipisah spasi |
{+n} | Nomor urut semua item terpilih |
Contoh paling sering dipakai adalah {q} untuk membuat preview merespons query — bukan hanya item aktif. Ini dasar untuk membangun pencarian isi file (akan disempurnakan di episode 11):
fzf --preview 'rg --color=always -C 2 {q} {}' --ansiSaat kalian mengetik, rg mencari pola itu di file yang sedang disorot dan menampilkan konteks di sekitar kecocokan. Dengan {+}, preview multi-select bisa menerima seluruh pilihan sebagai argumen:
fzf --multi --preview 'tail -5 {+}'Important
Placeholder {} dan {q} diekspansi oleh fzf, bukan oleh shell. Karena itu jangan mengutipnya dengan tanda kutip tunggal di dalam perintah preview, dan pastikan opsi --preview dikutip di luar (misal --preview 'head {}') agar fzf menerima string utuh lalu mengganti placeholder-nya sendiri.
bat dan richUntuk file kode dan Markdown, preview paling produktif adalah yang ber-syntax highlighting. Dua alat yang lazim dipakai:
| Alat | Keunggulan |
|---|---|
bat | Syntax highlighting, nomor baris, deteksi git, pemendekan baris |
rich | Preview teks/Markdown dengan rendering kaya dan tabel |
Contoh untuk file kode:
fzf --preview 'bat --color=always --style=numbers --line-range=:200 {}'--line-range=:200 membatasi hanya 200 baris pertama agar preview cepat untuk file raksasa. Untuk Markdown, rich menampilkan heading, list, dan blok kode dengan format visual:
fzf --preview 'rich {}'Preview window juga bisa menampilkan gambar — bergantung protokol yang didukung terminal. Tiga pendekatan umum:
| Metode | Terminal | Perintah |
|---|---|---|
| Kitty graphics | Kitty | kitten icat --place={W}x{H}@0x0 {} |
| iTerm2 inline image | iTerm2 | imgcat {} |
| Chafa / Sixel | Terminal umum | chafa {} |
Contoh termudah yang jalan di banyak terminal adalah chafa (mengubah gambar jadi blok karakter):
fzf --preview 'chafa {}'Note
Dukungan gambar membutuhkan terminal yang berbicara protokol graphics (Kitty/Sixel). Jika gambar tidak tampil, cek bahwa preview berjalan di terminal yang sama dengan fzf, dan ingat: terminal menentukan metode, fzf hanya menjalankan perintahnya. file {} bisa menjadi fallback cepat untuk mengidentifikasi file biner tanpa protokol khusus.
executePreview tidak hanya menampilkan — ia bisa menjadi pemicu tindakan. Dengan --bind, kalian bisa mengeksekusi perintah saat tombol ditekan, dan hasilnya tidak "merusak" antarmuka:
fzf --bind 'enter:execute(nvim {})'Menekan Enter membuka nvim dengan file yang disorot — sementara fzf tetap berjalan di belakang sampai editor ditutup. Variasi penting:
| Aksi | Perilaku |
|---|---|
execute(cmd) | Jalankan, lalu tampilkan output di tempat fzf |
execute-silent(cmd) | Jalankan tanpa menampilkan output |
become(cmd) | Ganti proses fzf dengan cmd (setelah selesai) |
Contoh nyata become untuk alur "pilih lalu buka":
fzf --bind 'enter:become(nvim {})'Perbedaan kunci: execute kembali ke fzf setelah perintah selesai; become menutup fzf dan menyerahkan terminal ke perintah pengganti — pola yang terasa mulus untuk membuka editor. Kombinasi --preview + --bind 'enter:execute(...)' adalah fondasi dari banyak tool interaktif yang dibangun di atas fzf.
Episode 10 ini memberi kalian mata kedua: menyalakan preview dengan --preview, mengatur panel dengan --preview-window (posisi, ukuran, wrap, hidden), placeholder dinamis ({}, {1}, {q}, {n}, {+}, {+n}), rich content dengan bat dan rich, preview gambar lewat Kitty/iTerm2/chafa, serta aksi langsung dengan execute, execute-silent, dan become.
Inti yang harus dibawa pulang:
--preview 'perintah {}' menjalankan perintah untuk item yang disorot.--preview-window mengatur posisi, ukuran, wrap, dan hidden; CTRL-/ men-toggle-nya.{}, {q}, {+}, dan {n} membuat preview dinamis mengikuti item, query, dan seleksi.bat/rich untuk kode & Markdown; chafa/Kitty/iTerm2 untuk gambar; execute/become untuk tindakan.Di episode 11, kita akan menggabungkan semua kekuatan fzf dengan dua tool ekosistem-nya: fd untuk pencarian file yang cepat dan menghormati .gitignore, serta ripgrep untuk pencarian isi — menghasilkan workflow pencarian tercepat yang pernah kalian miliki. Sampai jumpa di episode 11!