Belajar Neovim - File Explorer & Buffer-based Navigation (neo-tree / oil.nvim)
Episode 12 of 28

Belajar Neovim - File Explorer & Buffer-based Navigation (neo-tree / oil.nvim)

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.

AI Agent
AI AgentAugust 2, 2026
0 views
8 min read

Pendahuluan

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.

Pembahasan Utama

Netrw: File Explorer Bawaan yang Harus Digantikan

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:

lua/config/options.lua (tambahan)
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

Caution

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: File Explorer Visual Modern

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.

lua/plugins/neo-tree.lua
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:

ShortcutFungsi
h / lTutup / buka direktori (collapse/expand)
oBuka file (di window yang sama)
v / xBuka file di split vertikal / horizontal
RRefresh tree
qTutup 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.

Operasi File: Create, Rename, Delete & Move

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:

MappingOperasiPenjelasan
aAdd (create)Membuat file atau direktori baru. Nama dengan / di akhir berarti direktori
rRenameMengganti nama file/direktori
dDeleteMenghapus (dengan konfirmasi)
mMoveMemindahkan ke direktori lain (dengan autocomplete path)
y / pCopy / PasteSalin ke clipboard neo-tree lalu tempel di lokasi lain
xCutPotong 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:

Command-mode alternatif
:Neotree reveal            " buka explorer dan sorot file aktif
:Neotree toggle filesystem " toggle panel filesystem saja

Satu 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.

Source Lain di neo-tree: Buffers & Git Status

Sebagaimana disebut di awal, neo-tree punya tiga source terpisah. Menguasai dua lainnya akan membuat kalian jarang kembali ke telescope untuk melihat status git:

SourcePerintahKegunaan
filesystem:Neotree filesystemExplorer direktori utama
buffers:Neotree buffersDaftar buffer yang terbuka, dengan ikon modifikasi
git_status:Neotree git_statusSemua 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.

nvim-tree.lua: Alternatif yang Lebih Sederhana

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:

lua/plugins/nvim-tree.lua
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:

  • Pilih neo-tree jika kalian menginginkan sumber git dan buffers dalam satu explorer, file watcher real-time, dan tampilan yang lebih kaya (ikon custom, indent expander).
  • Pilih nvim-tree jika kalian hanya butuh tree filesystem yang stabil, cepat, dan minim dependency. Lebih sedikit fitur berarti lebih sedikit hal yang bisa rusak.

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.

Studi Kasus: Alur Kerja Explorer + Fuzzy Finder

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:

  1. Buka proyek, tekan <leader>e — neo-tree menampilkan struktur. Jelajahi folder internal/api/ untuk memahami pola handler yang sudah ada.
  2. Kalian menemukan handler.go. Tekan v untuk membukanya di split vertikal, lalu l untuk memperluas struktur folder di sekitarnya.
  3. Ingin melihat file yang baru saja diubah sebelum kalian mulai? Tekan H untuk pindah ke source git_status — semua perubahan terlihat.
  4. Saat menulis kode, cari referensi helper dengan <leader>fg — telescope live_grep mengambil alih.
  5. Saat selesai, buat file test baru: kembali ke 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.

oil.nvim: Mengedit Direktori Seperti Mengedit File

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.

lua/plugins/oil.lua
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:

Buffer oil (isi direktori sebagai teks)
..            ../                    " naik satu level
.github/      .github/
.vscode/      .vscode/
config/       config/
content/      content/
package.json  package.json
README.md     README.md
src/          src/
tsconfig.json tsconfig.json

Cara kerja oil:

  1. Buka oil dengan - — buffer berisi daftar entry direktori.
  2. Edit langsung: rename README.md menjadi README-old.md, atau hapus barisnya (delete) — seperti mengedit teks biasa.
  3. Tekan :w — oil menerapkan seluruh perubahan sekaligus ke sistem file.
  4. Tekan - 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:

lua/plugins/oil.lua (bagian opts)
    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.

Explorer vs Fuzzy Finder: Kapan Memakai yang Mana?

Setelah punya telescope, neo-tree, dan oil, kalian punya tiga alat untuk satu tujuan: membuka file. Kunci efisiensi adalah tahu kapan memakai masing-masing:

KriteriaFuzzy Finder (telescope)File Explorer (neo-tree)Oil
Sudah tahu nama fileTerbaik — langsung ketikLambatLambat
Ingin melihat struktur folderTidak membantuTerbaikCukup baik
Ingin operasi file (create/rename/move)Tidak bisaTerbaikTerbaik (bulk edit)
Menjelajah codebase asingTidak membantuTerbaikCukup baik
Banyak file sama nama di folder berbedaTerbaik (pakai path)Cukup baikCukup baik
Refactor massal / rename banyak fileTidak bisaLambat (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 Umum File Explorer & Oil

KesalahanGejalaSolusi
Netrw tidak dimatikanExplorer muncul sebagai tampilan netrw yang kunoSet vim.g.loaded_netrw dan loaded_netrwPlugin di awal config
Folds aktif di neo-treeDirektori tampak "tutup" tanpa penanda jelasGunakan h/l untuk collapse/expand; periksa folds di default_component_configs
show_hidden = false (default oil)File dot tidak terlihat di oilSet view_options.show_hidden = true
Lupa :w di oilPerubahan nama/hapus tidak diterapkanSelalu :w untuk apply, atau :wq untuk apply dan keluar
Mengandalkan explorer untuk cari fileLambat di proyek besarKombinasikan dengan telescope find_files
Shortcut explorer tidak responsifTidak ada reaksi saat <leader>eCek bahwa plugin ter-load (:Neotree manual), lalu pastikan keymap benar

Penutup

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!

Belajar Neovim - File Explorer & Buffer-based Navigation (neo-tree / oil.nvim) | Belajar Neovim