Belajar Fzf - Preview Window & Rich Content
Series/Belajar Fzf/Episode 10
Episode 10 of 23

Belajar Fzf - Preview Window & Rich Content

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.

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

Pendahuluan

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.

Konsep: Dua Panel, Satu Pikiran

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.

Preview isi file
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 {}'.

Menyalakan Preview: Opsi --preview

Bentuk dasarnya --preview 'perintah {}' — fzf mengeksekusi perintah melalui shell untuk setiap item aktif. Tiga hal yang perlu diingat:

  1. Perintah dijalankan lewat shell (sh -c), sehingga pipeline seperti cat {} | head -50 sah.
  2. {} diganti dengan item yang sedang disorot, bukan yang sudah dipilih.
  3. Jika perintah berjalan lambat, fzf mengganti hasilnya saat item berubah — dan menampilkan hasil parsial begitu tersedia.

Contoh preview metadata direktori menggunakan flag dari episode 6:

Preview isi direktori
fzf --preview 'ls -la {}'

Mengatur Jendela: --preview-window

Posisi, ukuran, dan perilaku panel diatur dengan --preview-window. Formatnya: POSISI,SIZE,FLAG. Beberapa kombinasi paling umum:

NilaiEfek
right,50%Di kanan, setengah lebar (default)
up,30%Di atas, 30% tinggi
down,10Di bawah, 10 baris
leftDi kiri
wrapMembungkus baris panjang (default: terpotong)
hiddenSembunyi dulu, muncul lewat toggle
+{2}Scroll awal mengikuti nomor baris di field 2
Preview di bawah dengan wrapping
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: Konten Dinamis

Placeholder adalah jantung preview. Selain {}, fzf mengenali beberapa bentuk:

PlaceholderMakna
{}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):

Preview mengikuti query
fzf --preview 'rg --color=always -C 2 {q} {}' --ansi

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

Preview semua file terpilih
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.

Rich Content: bat dan rich

Untuk file kode dan Markdown, preview paling produktif adalah yang ber-syntax highlighting. Dua alat yang lazim dipakai:

AlatKeunggulan
batSyntax highlighting, nomor baris, deteksi git, pemendekan baris
richPreview teks/Markdown dengan rendering kaya dan tabel

Contoh untuk file kode:

Preview kode dengan bat
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:

Preview Markdown dengan rich
fzf --preview 'rich {}'

Preview Gambar

Preview window juga bisa menampilkan gambar — bergantung protokol yang didukung terminal. Tiga pendekatan umum:

MetodeTerminalPerintah
Kitty graphicsKittykitten icat --place={W}x{H}@0x0 {}
iTerm2 inline imageiTerm2imgcat {}
Chafa / SixelTerminal umumchafa {}

Contoh termudah yang jalan di banyak terminal adalah chafa (mengubah gambar jadi blok karakter):

Preview gambar dengan chafa
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.

Aksi dari Preview: execute

Preview tidak hanya menampilkan — ia bisa menjadi pemicu tindakan. Dengan --bind, kalian bisa mengeksekusi perintah saat tombol ditekan, dan hasilnya tidak "merusak" antarmuka:

Buka file di editor dari fzf
fzf --bind 'enter:execute(nvim {})'

Menekan Enter membuka nvim dengan file yang disorot — sementara fzf tetap berjalan di belakang sampai editor ditutup. Variasi penting:

AksiPerilaku
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":

Buka file dengan become
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.

Penutup

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.
  • Placeholder {}, {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!