Belajar Fzf - Integrasi dengan Editor & Developer Ecosystem
Series/Belajar Fzf/Episode 20
Episode 20 of 23

Belajar Fzf - Integrasi dengan Editor & Developer Ecosystem

Membawa fzf ke jantung workflow pengembangan: integrasi di Neovim lewat fzf.vim, fzf-lua, dan telescope.nvim, serta pola fuzzy di VS Code. Termasuk tools pendamping seperti zoxide untuk navigasi, gh CLI untuk repo dan PR, lazygit, dan kombinasi bat dengan delta untuk preview yang hidup.

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

Pendahuluan

Di episode 19 kalian melihat ke mana fzf berkembang selama seri 0.70-0.74. Episode 20 ini menggeser fokus: bukan lagi fzf berdiri sendiri, melainkan fzf sebagai anggota ekosistem developer. Kalian akan belajar menempatkannya di dalam editor dan menggandengkannya dengan tools yang membentuk alur kerja harian — dari berpindah file, mencari kode, menavigasi direktori, memilih PR, sampai menilik diff.

Bayangkan fzf sebagai jantung yang tidak pernah terlihat: ia tidak tampil dalam daftar fitur editor, tetapi denyutnya terasa di mana-mana — pemilih file, pemilih buffer, pemilih command, semuanya berdetak dengan pola fuzzy. Episode ini membuat detak itu disadari dan dikendalikan, bukan hanya dinikmati.

Episode ini membahas integrasi Neovim (fzf.vim, fzf-lua, telescope.nvim), pola fuzzy di VS Code, lalu empat pendamping penting: zoxide untuk navigasi cerdas, gh CLI untuk repo dan PR, lazygit untuk git yang ramah, dan kombinasi bat dengan delta untuk preview yang hidup.

Neovim: fzf.vim

fzf lahir dari kebutuhan mencari file di Vim, jadi tak heran integrasi terbaiknya ada di keluarga Vim. fzf.vim adalah plugin resmi dari pembuat fzf yang menambahkan perintah-perintah fuzzy di dalam Neovim. Pemasangannya paling mudah lewat vim-plug:

.vimrc - pasang fzf.vim dengan vim-plug
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'

Setelah terpasang dan di-:source ulang, perintah-perintah kunci langsung tersedia:

PerintahFungsi
:FilesMencari file di bawah direktori kerja
:RgMencari isi kode lewat ripgrep, hasilnya masuk fzf
:BuffersBerpindah antar buffer yang terbuka
:HistoryMenelusuri history perintah Vim
:WindowsBerpindah antar window

Kekuatan fzf.vim ada pada kesederhanaannya: setiap perintah memanfaatkan fzf binary yang sudah terpasang, sehingga perilakunya identik dengan fzf di terminal — termasuk opsi --preview yang bisa diteruskan lewat variabel konfigurasi.

.vimrc - preview file dengan bat di fzf.vim
let g:fzf_preview_window = ['up:60%', 'ctrl-/']
command! -bang -nargs=* Rg
  \ call fzf#vim#grep('rg --column --line-number --no-heading --color=always '.shellescape(<q-args>), 1, <bang>0)

Note

fzf.vim memanggil fzf binary di luar proses editor — itu sebabnya pemasangan junegunn/fzf dengan fzf#install() menjadi bagian dari snippet di atas. Jika kalian sudah memasang fzf lewat package manager sistem, baris itu boleh dilewati. Yang penting: binary fzf harus bisa ditemukan di $PATH Neovim.

Neovim: fzf-lua

Jika kalian lebih nyaman dengan Lua dan konfigurasi yang eksplisit, fzf-lua adalah pilihan modern. Ia ditulis murni dalam Lua, memakai fzf binary sebagai backend, dan menawarkan banyak preset pemilih — file, buffer, git status, LSP symbols, hingga ripgrep. Konfigurasi dasarnya sangat singkat:

Konfigurasi fzf-lua di Neovim
local fzf_lua = require('fzf-lua')
fzf_lua.setup({})
 
vim.keymap.set('n', '<C-p>', function()
  fzf_lua.files()
end, { desc = 'Cari file dengan fzf' })

Keunggulan fzf-lua dibanding fzf.vim: hasil pencarian bisa dikustomisasi per pemilih, memakai fzf sebagai backend sekaligus tetap memanfaatkan previewer.builtin yang mengerti file, git, dan buffer. Ketika kalian membutuhkan "satu pemilih untuk setiap tugas" dengan kontrol halus, fzf-lua adalah kompromi terbaik antara kekuatan fzf dan ergonomi Neovim modern.

Neovim: telescope.nvim dengan Backend fzf

telescope.nvim adalah pemilih fuzzy paling populer di ekosistem Neovim. Ia tidak menggunakan fzf secara bawaan — scoring fuzzy-nya sendiri — tetapi telescope-fzf-native.nvim mengganti engine scoring-nya dengan implementasi fzf dalam C, memberi hasil yang jauh lebih cepat dan urutan yang lebih konsisten dengan fzf di terminal:

Pasang telescope + backend fzf native
Plug 'nvim-lua/plenary.nvim'
Plug 'nvim-lua/telescope.nvim', { 'tag': '0.1.x' }
Plug 'nvim-telescope/telescope-fzf-native.nvim', { 'do': 'make' }
Aktifkan extension fzf di telescope
require('telescope').setup {
  extensions = {
    fzf = { fuzzy = true, override_generic_sorter = true }
  },
}
require('telescope').load_extension('fzf')

Perbedaan konseptualnya penting: di telescope, fzf bukan antarmuka — ia adalah mesin scoring di belakang layar. Antarmukanya tetap milik telescope; yang dipinjam adalah kecepatan dan urutan hasil ala fzf. Bagi kalian yang sudah menguasai fzf di terminal, pengalaman telescope akan terasa familiar karena hasilnya "berpikir" seperti fzf.

Tip

Bagaimana memilih di antara ketiganya? fzf.vim untuk integrasi paling dekat dengan fzf itu sendiri dan ketergantungan paling sedikit; fzf-lua untuk kontrol Lua yang halus per pemilih; telescope untuk ekosistem plugin terbesar (LSP, git, treesitter, dll.) dengan engine fzf sebagai akselerator. Tidak ada yang salah — pilih berdasarkan kebutuhan ekosistem, bukan karena tren.

VS Code: Fuzzy di Dalam Editor

VS Code tidak "menjalankan fzf" secara langsung, tetapi filosofi fuzzy-nya sudah tertanam di jantung editor: Quick Open (Ctrl+P) dan Command Palette (Ctrl+Shift+P) adalah pemilih fuzzy bawaan untuk file dan perintah. Extension di marketplace menambah cakupan — pencarian symbol, git branch, dan berbagai preset — dengan pola interaksi yang sama.

Di sisi lain, terminal terintegrasi VS Code bisa menjalankan fzf secara penuh. Ini pola yang sering terlewat: kombinasi rg + fzf di terminal VS Code untuk pekerjaan yang tidak dimiliki Quick Open — misalnya memilih branch lalu checkout, atau memilih file untuk di-diff:

Pilih file untuk diff di terminal VS Code
git status --short | fzf --multi --preview 'git diff --color=always {}' |
  awk '{print $2}' | xargs git diff
fzf + git diff bekerja penuh di terminal terintegrasi

Pola ini menunjukkan satu prinsip: editor modern punya fuzzy bawaan, tetapi fzf tetap unggul ketika pilihan harus diproses lebih lanjut — dipipakan ke perintah lain, di-preview dengan bat, atau digabung dengan git.

zoxide: Navigasi Direktori yang Cerdas

Pindah ke pendamping di luar editor. zoxide adalah "smarter cd" — ia merekam direktori yang sering kalian kunjungi (frecency) dan membiarkan kalian lompat dengan sebagian nama. Yang membuatnya relevan dengan series ini: zoxide memiliki integrasi fzf bawaan. Dengan mode --cmd cd, ketika nama yang kalian ketik tidak cocok persis dengan satu direktori, zoxide membuka pemilih interaktif berbasis fzf untuk memilih dari kandidat:

Inisialisasi zoxide dengan fzf - zsh
eval "$(zoxide init --cmd cd zsh)"
cd tanpa match persis membuka pemilih fzf dari kandidat
Lompat ke direktori dengan sebagian nama
cd apic
cd fzfproj

Kombinasi zoxide + fzf adalah contoh terbaik fzf sebagai fallback interaktif: zoxide menangani kasus cepat (nama persis), fzf menangani kasus ragu (banyak kandidat). Dua lapisan yang saling melengkapi, bukan bersaing.

Tip

Jika kalian lebih suka memilih secara eksplisit, pipe hasilnya sendiri: zoxide query --list | fzf | xargs cd. Tetapi begitu mencoba mode --cmd cd, kalian akan merasakan keajaiban yang berbeda — tidak perlu mengetik perintah fzf sama sekali, cukup cd <sebagian-nama> dan pemilih muncul saat dibutuhkan.

gh CLI: Repo dan PR lewat Fuzzy

gh — GitHub CLI — adalah pendamping berikutnya. Outputnya yang berbentuk tabel adalah bahan mentah sempurna untuk fzf: kolom pertama bisa diambil dengan awk lalu dieksekusi. Memilih repo lalu men-clone:

Clone repo terpilih
gh repo list --limit 100 | fzf --preview 'gh repo view {1} --json description -q .description' |
  awk '{print $1}' | xargs gh repo clone
gh repo list memberi daftar; fzf memilih; awk mengambil kolom pertama

Memilih PR lalu checkout secara langsung:

Checkout PR terpilih
gh pr list | fzf --preview 'gh pr view {1}' | awk '{print $1}' | xargs gh pr checkout
Nomor PR di kolom pertama diteruskan ke gh pr checkout

Pola gh ... | fzf | awk '{print $1}' | xargs gh ... adalah idiom yang bisa diulang untuk hampir semua perintah gh: issues, releases, bahkan actions. Sekali kalian memahaminya, antarmuka fuzzy untuk seluruh GitHub menjadi tinggal mengetik.

lazygit: Git yang Ramah

lazygit adalah TUI git yang membuat operasi kompleks terasa ringan. Relevansinya dengan series ini: lazygit membawa pengalaman fuzzy finder ke dalam tampilannya sendiri — mencari file yang berubah, branch, atau commit tidak lagi mengetik nama, melainkan menyaring daftar secara interaktif dengan pola yang sama seperti fzf. Di layar status, tekan shortcut fuzzy find untuk langsung melompat ke file, dan dari sana staging, commit, dan push dilakukan dengan tombol tunggal.

Pendekatan lazygit dan fzf berbeda cara tetapi sejalan tujuan: mengurangi jarak antara niat dan eksekusi. fzf adalah blok bangunan di terminal; lazygit adalah aplikasi jadi yang mengadopsi filosofinya. Banyak engineer memakai keduanya — fzf untuk memilih apa pun di shell, lazygit ketika pekerjaan sudah jelas-jelas soal git.

Note

lazygit tidak menggantikan fzf — dan tidak dimaksudkan begitu. fzf tetap unggul ketika sumber data bisa berupa apa saja (file, proses, log, API); lazygit unggul ketika konteksnya sudah terikat pada git. Kenali batas masing-masing, dan kombinasikan: misalnya pakai fzf untuk memilih branch, lalu lanjutkan di lazygit untuk menyelesaikan pekerjaan git.

bat dan delta: Preview yang Hidup

Terakhir, dua pager yang mengubah preview fzf dari teks polos menjadi kode berwarna. bat sudah kalian kenal sejak episode 0 sebagai cat dengan syntax highlighting. delta melengkapi dengan memformat git diff menjadi tampilan yang hidup — warna, nomor baris, dan hunks yang rapi:

Preview diff dengan delta di fzf
git status --short | fzf --multi --preview 'git diff --color=always -- {2} | delta --color-only'
git diff dipipakan ke delta sehingga preview tampak seperti di editor
Preview file dengan bat
fd -t f | fzf --preview 'bat --color=always --style=numbers {}'

Gabungkan keduanya dengan gh: preview PR yang menampilkan diff berwarna membuat peninjauan code review terasa seperti bekerja di editor, padahal kalian hanya di terminal. bat dan delta adalah dua alasan paling kuat untuk selalu mengutip placeholder{} yang tidak dikutip akan memecah nama file ber-spasi dan membuat preview tampak error.

Important

Ingat prinsip episode 14: delta dan bat membaca {} yang disisipkan ke perintah shell. Kutip placeholder di dalam perintah preview, dan jangan pernah menggabungkan output mereka ke perintah yang mengeksekusi. Preview adalah untuk dilihat, bukan untuk dijalankan — kecuali kalian sengaja membuatnya aman.

Kesalahan Umum

KesalahanGejalaSolusi
fzf.vim tanpa binary fzf:Files error atau kosongPasang junegunn/fzf dengan fzf#install() atau paket sistem
Telescope memakai sorter sendiriHasil terasa "lain" dari fzfMuat extension fzf dengan override_generic_sorter
`gh repo listfzftanpaawk`Seluruh kolom terpilih sebagai satu string
zoxide tanpa mode --cmd cdTidak ada pemilih fzfInisialisasi dengan zoxide init --cmd cd zsh
Preview diff tanpa --colorDelta tidak berwarnaTeruskan --color=always dari git sebelum masuk ke delta
Placeholder tidak dikutipPreview error pada file ber-spasiKutip {} di dalam perintah preview

Penutup

Pada episode 20 ini kalian membawa fzf ke tengah ekosistem developer: fzf.vim, fzf-lua, dan telescope.nvim dengan backend fzf-native di Neovim; pola fuzzy Quick Open dan terminal terintegrasi di VS Code; zoxide yang menjadikan fzf fallback interaktif untuk navigasi; gh CLI dengan idiom gh ... | fzf | xargs gh ... untuk repo dan PR; lazygit yang mengadopsi filosofi fuzzy dalam TUI git; serta bat dan delta yang menghidupkan preview dengan warna.

Pesan untuk dibawa pulang: fzf adalah lapisan yang menempel di mana pun ada daftar — dan setiap daftar di ekosistem developer adalah kandidat pemilih fuzzy.

Semua integrasi ini, bagaimanapun, akan sia-sia jika konfigurasi hanya hidup di satu mesin. Di episode 21 kita membahas production-ready setup & dotfiles — menyimpan FZF_* dan keybinding di repo dotfiles, konfigurasi konsisten untuk bash/zsh/fish/nushell, bootstrap otomatis di mesin baru, hingga checklist konfigurasi yang deterministik untuk tim.

Belajar Fzf - Integrasi dengan Editor & Developer Ecosystem | Belajar Fzf