Fuzzy finder hanya membantu kalau kalian ingat nama filenya. Di episode ini kita membangun file explorer visual dengan neo-tree.nvim beserta operasi create/rename/delete/move, lalu memperkenalkan pendekatan radikal oil.nvim yang mengedit direktori seperti mengedit file teks biasa.

Setelah di episode 11 sebelumnya kita membangun navigasi super cepat dengan telescope.nvim, ada satu pertanyaan yang sering muncul di benak pengguna baru Neovim: "Kalau sudah bisa cari file dalam sepersekian detik, untuk apa masih butuh file explorer?" Jawabannya: karena fuzzy finder hanya membantu jika kalian sudah tahu nama filenya.
Bayangkan kalian baru bergabung ke codebase orang lain. Kalian membuka repo, lalu apa? Telescope find_files menuntut kalian mengetik sesuatu. Tapi untuk memahami struktur proyek — "apa saja file di direktori services/, modul apa yang saling bergantung, file mana yang baru saya buat?" — kalian butuh melihat peta direktori secara visual. Di dunia nyata, ini persis seperti perbedaan antara mencari nama kontak di telepon (fuzzy finder) versus melihat daftar folder di rak arsip (file explorer): keduanya saling melengkapi, bukan saling menggantikan.
Di episode 12 ini kita akan membahas dua pendekatan: neo-tree.nvim sebagai file explorer visual modern, dan oil.nvim yang menawarkan paradigma radikal — mengedit direktori seperti mengedit file teks biasa. Mari kita mulai.
Fakta yang jarang diketahui: Neovim sebenarnya sudah punya file explorer bawaan bernama netrw (dipanggil lewat :Explore, :e ., atau :Ex). Sayangnya, netrw terasa kuno — navigasinya membingungkan, tidak ada ikon file, dan tabrakan keymap-nya sering mengganggu plugin lain.
Sebagian besar user modern menggantinya dengan neo-tree.nvim atau nvim-tree.lua. Dan yang terpenting: netrw harus dimatikan agar tidak bentrok dengan explorer pilihan kita. Caranya lewat satu blok vim.g di config:
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1Caution
Dua baris di atas (loaded_netrw dan loaded_netrwPlugin) wajib ada sebelum plugin explorer dimuat. Tanpa itu, saat kalian menekan shortcut explorer, kadang yang muncul justru netrw — atau terjadi konflik keymap yang sulit dilacak. Ini salah satu jebakan paling klasik saat setup file explorer.
neo-tree.nvim adalah file explorer yang memisahkan sumber (source) menjadi tiga panel: filesystem, buffers, dan git_status. Ini berbeda dari kebanyakan explorer lain yang menggabungkan semuanya dalam satu view. Ia juga punya file watcher berbasis libuv — perubahan file di luar editor langsung tercermin di tree tanpa refresh manual.
return {
{
"nvim-neo-tree/neo-tree.nvim",
cmd = "Neotree",
keys = {
{ "<leader>e", "<cmd>Neotree toggle<CR>", desc = "Toggle file explorer" },
{ "<leader>E", "<cmd>Neotree focus<CR>", desc = "Fokus ke file explorer" },
},
dependencies = {
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
"nvim-tree/nvim-web-devicons",
},
opts = {
close_if_last_window = true,
filesystem = {
follow_current_file = { enabled = true },
use_libuv_file_watcher = true,
},
},
},
}Dua setting kunci yang perlu dipahami:
follow_current_file = true — setiap kali kalian pindah ke file lain, neo-tree otomatis menyorot file itu di dalam tree. Ini membuat "di mana saya sekarang?" selalu terjawab. Sangat berguna di proyek besar.use_libuv_file_watcher = true — memakai file watcher bawaan sistem. Kalau teman kalian mengubah file di editor lain, perubahan langsung terlihat di tree kalian.Keymap navigasi penting di neo-tree:
| Shortcut | Fungsi |
|---|---|
h / l | Tutup / buka direktori (collapse/expand) |
o | Buka file (di window yang sama) |
v / x | Buka file di split vertikal / horizontal |
R | Refresh tree |
q | Tutup file explorer |
? | Tampilkan semua mapping yang tersedia |
Tip
Neo-tree memakai h dan l sebagai toggle direktori, bukan Enter seperti explorer pada umumnya. Ini memang sengaja: konsisten dengan Vim motion yang sudah kalian pelajari di episode 2. h menutup direktori (kembali ke parent), l membukanya.
Nilai jual utama file explorer dibanding fuzzy finder adalah operasi file visual: membuat, mengganti nama, menghapus, dan memindahkan file tanpa keluar dari editor. Neo-tree menyediakan semua itu melalui mapping default pada file yang disorot:
| Mapping | Operasi | Penjelasan |
|---|---|---|
a | Add (create) | Membuat file atau direktori baru. Nama dengan / di akhir berarti direktori |
r | Rename | Mengganti nama file/direktori |
d | Delete | Menghapus (dengan konfirmasi) |
m | Move | Memindahkan ke direktori lain (dengan autocomplete path) |
y / p | Copy / Paste | Salin ke clipboard neo-tree lalu tempel di lokasi lain |
x | Cut | Potong untuk dipindahkan |
Contoh alur kerja nyata: kalian ingin membuat file lua/plugins/dap.lua untuk episode 22 nanti. Buka neo-tree (<leader>e), navigasi ke folder lua/plugins/ dengan j/k dan l, tekan a, ketik dap.lua, tekan Enter. File langsung muncul di tree dan siap diedit.
Important
Untuk membuat direktori, akhiri nama dengan / — misal ketik configs/ saat menekan a. Neo-tree membedakan file dan direktori berdasarkan karakter terakhir ini. Lupa slash sering bikin file (bukan folder) yang terlanjur dibuat.
Keseluruhan operasi di atas juga bisa dilakukan via command line tanpa explorer, jika kalian lebih suka:
:Neotree reveal " buka explorer dan sorot file aktif
:Neotree toggle filesystem " toggle panel filesystem sajaSatu catatan penting soal operasi file: semuanya adalah perubahan sistem file secara langsung — tidak ada undo di dalam explorer. Neo-tree memberikan konfirmasi untuk operasi berisiko (d untuk delete), tapi membiasakan diri dengan keymap sebelum menggunakannya di file penting adalah kebiasaan yang baik.
Sebagaimana disebut di awal, neo-tree punya tiga source terpisah. Menguasai dua lainnya akan membuat kalian jarang kembali ke telescope untuk melihat status git:
| Source | Perintah | Kegunaan |
|---|---|---|
filesystem | :Neotree filesystem | Explorer direktori utama |
buffers | :Neotree buffers | Daftar buffer yang terbuka, dengan ikon modifikasi |
git_status | :Neotree git_status | Semua file yang berubah di working tree git |
Untuk berpindah antar source, cukup tekan H / L di dalam window neo-tree (mengikuti logika "kiri/kanan" yang konsisten dengan Vim motion). Source git_status sangat berguna untuk memilah pekerjaan: file untracked, modified, dan deleted dikelompokkan secara visual, dan menekan o pada sebuah file langsung membuka diff-nya.
Sebelum neo-tree, eksplorasi file di Neovim identik dengan nvim-tree.lua — plugin yang lebih ringan, fokus satu source (filesystem saja), dan tidak bergantung pada nui.nvim. Banyak distro (NvChad, misalnya) masih memakainya sebagai default karena simpel:
return {
"nvim-tree/nvim-tree.lua",
dependencies = { "nvim-tree/nvim-web-devicons" },
keys = {
{ "<leader>e", "<cmd>NvimTreeToggle<CR>", desc = "Toggle file explorer" },
},
opts = {
view = { width = 34 },
update_cwd = true,
},
}Bagaimana memilih di antara keduanya? Pertimbangannya:
Tip
Tidak ada keharusan memilih salah satu. Banyak power user memasang neo-tree sebagai explorer utama dan oil untuk operasi massal, tanpa nvim-tree sama sekali. Kuncinya adalah tidak memasang dua explorer dengan keymap yang sama — keduanya akan memperebutkan <leader>e dan membuat konflik.
Mari kita rangkai semuanya dalam satu skenario kerja nyata. Kalian menerima task untuk menambahkan endpoint baru GET /health di service Go yang belum pernah kalian buka sebelumnya:
<leader>e — neo-tree menampilkan struktur. Jelajahi folder internal/api/ untuk memahami pola handler yang sudah ada.handler.go. Tekan v untuk membukanya di split vertikal, lalu l untuk memperluas struktur folder di sekitarnya.H untuk pindah ke source git_status — semua perubahan terlihat.<leader>fg — telescope live_grep mengambil alih.filesystem (tekan L), sorot folder internal/api/, tekan a, ketik handler_test.go.Perhatikan alurnya: explorer untuk menjelajah dan memahami, git status untuk mengawasi perubahan, fuzzy finder untuk menemukan sesuatu yang spesifik. Tiga alat, satu tujuan, tanpa satu pun klik mouse.
Sekarang mari kita bahas pendekatan yang benar-benar berbeda. oil.nvim (Oil = "Open In Lover" — parafrase dari konsep edit directory like a file) tidak menggambar tree. Ia menampilkan isi direktori sebagai buffer teks biasa — sebuah file dengan satu baris per entry. Kalian mengeditnya seperti mengedit teks: ubah nama, hapus baris, tambahkan baris, lalu simpan dengan :w dan perubahan akan diterapkan ke sistem file nyata.
return {
{
"stevearc/oil.nvim",
keys = {
{ "-", "<cmd>Oil<CR>", desc = "Buka oil (direktori parent)" },
{ "<leader>-", "<cmd>Oil<CR>", desc = "Buka oil dari file aktif" },
},
opts = {
default_file_explorer = true,
columns = { "icon" },
delete_to_trash = false,
view_options = {
show_hidden = true,
},
},
},
}Berikut contoh bagaimana tampilan buffer oil:
.. ../ " naik satu level
.github/ .github/
.vscode/ .vscode/
config/ config/
content/ content/
package.json package.json
README.md README.md
src/ src/
tsconfig.json tsconfig.jsonCara kerja oil:
- — buffer berisi daftar entry direktori.README.md menjadi README-old.md, atau hapus barisnya (delete) — seperti mengedit teks biasa.:w — oil menerapkan seluruh perubahan sekaligus ke sistem file.- lagi untuk naik ke parent directory.Oil juga punya preview bawaan: arahkan kursor ke sebuah file dan oil menampilkan isinya di window preview — membantu memutuskan "apakah ini file yang saya cari?" tanpa membukanya.
Note
Perbedaan filosofis yang menarik: neo-tree adalah mode visual (kalian menavigasi dengan gerakan dan keymap), sedangkan oil adalah mode tekstual (kalian mengetik perubahan lalu menyimpannya). Sebagian orang lebih cepat dengan visual, sebagian lagi lebih cepat dengan mengetik — karena itu banyak yang memasang keduanya sekaligus.
Salah satu opsi oil yang layak dipertimbangkan adalah delete_to_trash — mengirim file yang "dihapus" ke trash system alih-alih menghapus permanen. Ini jaring pengaman yang murah untuk kesalahan yang tidak bisa di-undo:
opts = {
default_file_explorer = true,
columns = { "icon" },
# [!code --:1]
delete_to_trash = false,
# [!code ++:1]
delete_to_trash = true,
view_options = {
show_hidden = true,
},
},Caution
Perhatikan bahwa delete_to_trash = true hanya bekerja jika sistem kalian menyediakan konsep trash — misalnya macOS dan desktop Linux dengan gio trash. Di server headless atau WSL tanpa environment desktop, opsi ini bisa gagal diam-diam, sehingga menghapus tetap permanen. Uji sekali di lingkungan kalian sebelum bergantung pada opsi ini.
Setelah punya telescope, neo-tree, dan oil, kalian punya tiga alat untuk satu tujuan: membuka file. Kunci efisiensi adalah tahu kapan memakai masing-masing:
| Kriteria | Fuzzy Finder (telescope) | File Explorer (neo-tree) | Oil |
|---|---|---|---|
| Sudah tahu nama file | Terbaik — langsung ketik | Lambat | Lambat |
| Ingin melihat struktur folder | Tidak membantu | Terbaik | Cukup baik |
| Ingin operasi file (create/rename/move) | Tidak bisa | Terbaik | Terbaik (bulk edit) |
| Menjelajah codebase asing | Tidak membantu | Terbaik | Cukup baik |
| Banyak file sama nama di folder berbeda | Terbaik (pakai path) | Cukup baik | Cukup baik |
| Refactor massal / rename banyak file | Tidak bisa | Lambat (satu-satu) | Terbaik (edit banyak baris) |
Tip
Aturan praktis dari para power user: telescope untuk membuka file yang kalian kenal, neo-tree untuk melihat konteks di sekitar file aktif, dan oil untuk manipulasi file massal. Pilih berdasarkan konteks, bukan berdasarkan kebiasaan.
| Kesalahan | Gejala | Solusi |
|---|---|---|
| Netrw tidak dimatikan | Explorer muncul sebagai tampilan netrw yang kuno | Set vim.g.loaded_netrw dan loaded_netrwPlugin di awal config |
| Folds aktif di neo-tree | Direktori tampak "tutup" tanpa penanda jelas | Gunakan h/l untuk collapse/expand; periksa folds di default_component_configs |
show_hidden = false (default oil) | File dot tidak terlihat di oil | Set view_options.show_hidden = true |
Lupa :w di oil | Perubahan nama/hapus tidak diterapkan | Selalu :w untuk apply, atau :wq untuk apply dan keluar |
| Mengandalkan explorer untuk cari file | Lambat di proyek besar | Kombinasikan dengan telescope find_files |
| Shortcut explorer tidak responsif | Tidak ada reaksi saat <leader>e | Cek bahwa plugin ter-load (:Neotree manual), lalu pastikan keymap benar |
Pada episode 12 ini kita telah menambahkan dua senjata navigasi yang saling melengkapi: neo-tree.nvim sebagai file explorer visual dengan operasi file lengkap (create, rename, delete, move, copy-paste) dan file watcher real-time, serta oil.nvim yang mengedit direktori seperti mengedit teks biasa dengan :w sebagai tombol apply. Kalian juga sekarang tahu kapan harus memakai explorer, kapan fuzzy finder, dan kapan oil — berdasarkan konteks pekerjaan, bukan kebiasaan.
Hingga titik ini, kalian bisa membuka file apa pun di proyek secepat kilat. Tapi bagaimana dengan berpindah ke file yang sama berulang kali dalam satu sesi kerja? Atau membangun kembali seluruh layout window setelah laptop direstart? Di episode 13 selanjutnya kita akan membahas jump navigation super cepat dengan flash.nvim, penanda file favorit dengan harpoon, serta session management dan undo tree — level berikutnya dari produktivitas editing. Pastikan tetap semangat!