Belajar Neovim - AI Code Completion Integration (GitHub Copilot / Codeium / Avante)
Episode 21 of 28

Belajar Neovim - AI Code Completion Integration (GitHub Copilot / Codeium / Avante)

Di episode ini kita akan mengintegrasikan AI coding assistant ke dalam Neovim — mulai dari autocomplete ala GitHub Copilot, alternatif gratis Codeium, hingga AI chat inline bergaya Cursor dengan Avante — beserta praktik terbaik dan batasan keamanannya.

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

Pendahuluan

Setelah di episode 20 sebelumnya kita mengotomatiskan editing dengan autopairs, surround, comment, dan which-key, pada episode kali ini kita akan memasuki era yang tidak bisa dihindari lagi dalam pekerjaan software engineering: integrasi AI coding assistant langsung di dalam editor. Kita akan membahas tiga pendekatan berbeda — GitHub Copilot (copilot.lua), Codeium (codeium.nvim), dan Avante (avante.nvim) yang meniru pengalaman AI chat ala Cursor — lengkap dengan workflow, perbandingan, dan praktik keamanan.

Kenapa topik ini krusial di dunia nyata? Sebagai seorang DevOps atau Software Engineer, kalian tidak perlu AI untuk menulis kode yang sudah jelas polanya — boilerplate Kubernetes manifest, script CI/CD yang monoton, atau test case yang berulang. Di situlah kekuatan AI coding assistant: ia menghilangkan pekerjaan mengetik yang prediktif dan berulang sehingga kalian bisa fokus pada keputusan desain yang tidak bisa diprediksi. Namun kekuatan ini datang dengan tanggung jawab: kode yang dihasilkan AI bisa mengandung bug halus, kelemahan keamanan, atau — lebih parah — membocorkan rahasia perusahaan jika kalian tidak hati-hati dengan apa yang dikirim ke cloud.

Di episode ini kita akan membangun integrasi yang produktif sekaligus aman. Mari mulai dari konsepnya.

Pembahasan Utama

Konsep: Bagaimana AI Coding Assistant Bekerja?

Sebelum memilih plugin, pahami mekanisme kerjanya. Semua AI coding assistant modern bekerja dalam dua mode utama:

  1. Autocomplete (inline suggestion) — model melihat konteks kode di sekitar kursor (buffer saat ini, buffer lain yang terbuka, bahkan repo terkait) lalu menebak baris atau blok kode berikutnya. Saran ditampilkan sebagai ghost text yang bisa diterima dengan satu tombol.
  2. AI Chat (conversational) — kalian bertanya dalam bahasa alami, dan AI memberikan jawaban yang bisa disisipkan langsung ke buffer, atau bahkan mengubah beberapa file sekaligus (seperti Edit mode di Cursor).

Yang membedakan Neovim dari editor lain adalah fleksibilitasnya: kalian bisa memilih plugin mana yang dipakai, mengatur keymap sendiri, dan menyesuaikan perilaku tanpa vendor lock-in. Mari lihat ketiganya.

GitHub Copilot: copilot.lua + copilot-cmp

GitHub Copilot adalah AI assistant yang paling matang dan terintegrasi luas. Untuk Neovim, ada dua jalur: copilot.vim (plugin Vimscript resmi dari GitHub) dan copilot.lua (re-implementasi Lua yang lebih kaya fitur). Kita akan memakai copilot.lua karena lebih mudah dikustomisasi:

lua/plugins/copilot.lua
return {
  {
    "zbirenbaum/copilot.lua",
    event = "InsertEnter",
    opts = {
      suggestion = { enabled = true, auto_trigger = true },
      panel = { enabled = true },
      filetypes = {
        yaml = false,
        markdown = true,
        help = false,
        gitcommit = true,
      },
    },
  },
  {
    "zbirenbaum/copilot-cmp",
    dependencies = { "zbirenbaum/copilot.lua" },
    config = function()
      require("copilot_cmp").setup()
    end,
  },
}

Setelah itu, tambahkan keymap untuk menerima, menolak, dan menavigasi saran:

lua/plugins/copilot.lua (keymaps)
local keys = function()
  local cmp = require("cmp")
  local copilot_suggestion = require("copilot.suggestion")
 
  return {
    { "<C-l>", function() copilot_suggestion.accept() end,
      desc = "Accept Copilot suggestion" },
    { "<C-j>", function()
        if cmp.visible() then cmp.select_next_item() end
        copilot_suggestion.next()
      end, desc = "Next Copilot suggestion" },
    { "<C-k>", function()
        copilot_suggestion.prev()
      end, desc = "Previous Copilot suggestion" },
    { "<C-u>", function() copilot_suggestion.dismiss() end,
      desc = "Dismiss Copilot suggestion" },
  }
end

Note

Kombinasi copilot-cmp membuat saran Copilot tampil sebagai salah satu source di dalam popup nvim-cmp (yang sudah kita bangun di episode 16), bukan sebagai ghost text terpisah. Keuntungannya: satu popup completion untuk LSP, buffer, path, snippet, dan AI sekaligus — konsisten dan tidak bingung. Alternatifnya, tanpa copilot-cmp, saran tampil sebagai ghost text berwarna abu-abu di buffer.

Menggunakan Copilot: Saran, Navigasi, dan Penolakan

Setelah terintegrasi, alur kerjanya:

  1. Muncul saran otomatis saat kalian berhenti mengetik (auto_trigger = true). Ghost text muncul dengan teks berwarna redup di samping kursor.
  2. Ctrl+l menerima saran penuh.
  3. Ctrl+j / Ctrl+k berpindah ke saran alternatif berikutnya/sebelumnya.
  4. Ctrl+u membatalkan saran.

Coba tulis komentar atau nama fungsi yang jelas di Go, lalu perhatikan saran yang muncul. Contoh nyata:

main.go
// fungsi untuk mengembalikan jumlah elemen dalam slice
func countElements(slice []int) int {
    return len(slice)
}

Ketika kalian menulis komentar di atas, Copilot memahami intent-nya dan menyarankan implementasi return len(slice). Ini adalah contoh pattern-matching yang membuat penggunaannya sangat adiktif — dan justru di situlah letak bahayanya: jangan pernah menerima saran tanpa berpikir. Setiap saran harus diverifikasi seperti kode yang kalian tulis sendiri.

Important

Praktik terbaik pertama: jangan jadikan accept sebagai gerakan refleks. Biasakan menekan Ctrl+l sambil membaca saran yang muncul, bukan hanya menerimanya secara buta. AI yang baik sekalipun sering menghasilkan kode yang terlihat benar tapi secara logika salah — misalnya salah memakai variabel idx alih-alih index, atau mengabaikan error handling yang sudah disepakati tim.

Alternatif Gratis: codeium.nvim

Jika kalian tidak memiliki langganan GitHub Copilot (atau ingin alternatif yang tidak terikat ekosistem GitHub), Codeium menawarkan pengalaman serupa dengan akun gratis. Plugin codeium.nvim berbasis Lua murni:

lua/plugins/codeium.lua
return {
  {
    "Exafunction/codeium.nvim",
    dependencies = {
      "nvim-lua/plenary.nvim",
      "hrsh7th/nvim-cmp",
    },
    event = "InsertEnter",
    opts = {
      enable_chat = true,
    },
    config = function(_, opts)
      require("codeium").setup(opts)
      require("cmp").setup({
        sources = { { name = "codeium" } },
      })
    end,
  },
  {
    "monkoose/nvlime",
    event = "VeryLazy",
  },
}

Warning

Contoh spec di atas mengandung plugin monkoose/nvlime yang sengaja keliru — plugin tersebut adalah AI repl untuk Common Lisp, bukan bagian dari Codeium. Ini adalah pengingat akan salah satu pitfall terbesar: verifikasi nama dan source setiap plugin sebelum memasukkannya ke lazy.lua. Plugin manager hanya mengeksekusi apa yang kalian tulis; typo atau plugin palsu dengan nama mirip bisa membawa kode berbahaya ke dalam konfigurasi kalian. Hapus baris nvlime dari spec kalian — jangan pernah meniru kode dari internet secara buta.

AI Chat Bergaya Cursor: avante.nvim

Setelah autocomplete, level berikutnya adalah AI chat inline yang bisa melihat konteks buffer dan mengedit file secara langsung — pengalaman yang dipopulerkan oleh Cursor. avante.nvim membawa pengalaman ini ke Neovim. Ia menggunakan plugin nvim-treesitter (episode 14), nvim-cmp (episode 16), serta plenary:

lua/plugins/avante.lua
return {
  {
    "yetone/avante.nvim",
    event = "VeryLazy",
    version = "*",
    build = "make",
    dependencies = {
      "nvim-treesitter/nvim-treesitter",
      "hrsh7th/nvim-cmp",
      "nvim-lua/plenary.nvim",
      "nvim-telescope/telescope.nvim",
      "nvim-treesitter/playground",
      "MunifTanjim/nui.nvim",
      "stevearc/dressing.nvim",
    },
    opts = {
      provider = "copilot",
      hints = { enabled = true },
      windows = {
        position = "right",
        width = 0.5,
      },
      file_selector = { provider = "telescope" },
    },
  },
}

Avante mendukung beberapa provider model: openai, claude, copilot, gemini, dan ollama (untuk model lokal). Contoh di atas memakai copilot sebagai provider agar tidak perlu menyiapkan API key tambahan — selama kalian sudah login ke Copilot.

Alur kerjanya seperti ini:

  1. Pilih beberapa baris kode dalam visual mode, tekan Ctrl+i untuk memulai inline prompt di samping selection.
  2. Ketik instruksi, misalnya "refactor fungsi ini agar mengembalikan error sebagai second return value".
  3. Avante menampilkan diff dari perubahan yang diusulkan. Kalian bisa accept, reject, atau iterate sampai hasilnya benar.
Membuat file baru dengan Avante (contoh)
vim.keymap.set("n", "<leader>aa", function()
  vim.cmd("AvanteAsk")
end, { desc = "Avante: Ask" })
 
vim.keymap.set("n", "<leader>ae", function()
  vim.cmd("AvanteEdit")
end, { desc = "Avante: Edit selected" })
 
vim.keymap.set("v", "<leader>ae", function()
  vim.cmd("AvanteEdit")
end, { desc = "Avante: Edit selection" })
 
vim.keymap.set("n", "<leader>at", function()
  vim.cmd("AvanteToggle")
end, { desc = "Avante: Toggle chat" })

Tip

Avante membawa risiko AI mengedit banyak file tanpa kalian pahami. Selalu jalankan :w !git diff atau buka diffview.nvim (episode 18) untuk meninjau setiap perubahan yang dihasilkan AI sebelum commit. Rekomendasi kami: gunakan mode AvanteEdit untuk file tunggal dulu, dan berhati-hatilah dengan edit lintas-file yang otomatis.

Workflow AI Lengkap di Neovim

Mari kita rangkai menjadi alur kerja sehari-hari:

TahapAksiTool
Menulis kode baruBiarkan saran muncul, terima dengan Ctrl+lCopilot / Codeium
Menolak saranCtrl+u untuk dismissCopilot / Codeium
Minta penjelasanPilih kode → AvanteAsk → tanya "jelaskan fungsi ini"Avante
RefactorPilih kode → AvanteEdit → instruksi refactorAvante
Review hasil AI:w !git diff atau diffviewGit / diffview
Tulis testKomentar "tulis unit test untuk fungsi X"Copilot / Avante

Perbandingan Tool

FiturGitHub CopilotCodeiumAvante
Mode utamaAutocompleteAutocompleteChat + Edit
BiayaBerbayar (gratis untuk tertentu)FreemiumGratis (model tergantung provider)
Integrasi cmpYa (via copilot-cmp)Ya (native)Ya (untuk prompt)
Konteks repositoryYaYaBergantung provider
Lokal / offlineTidakTidakBisa via Ollama
UI chatPanel terpisahChat terpisahSidebar / floating seperti Cursor

Praktik Terbaik & Keamanan AI di Codebase

Ini bagian yang paling sering diabaikan, dan paling penting untuk seorang engineer profesional:

Warning

Jangan pernah menempelkan rahasia ke AI. API key, kredensial database, token akses cloud, atau data pribadi pelanggan — semuanya dilarang keras dikirim ke assistant berbasis cloud. Saran AI dikirim ke server pihak ketiga dan bisa di-log atau dipakai untuk training. Di perusahaan dengan kebijakan data governance ketat, kebocoran ini bisa menjadi pelanggaran kontrak. Jika ragu, minta tim security untuk daftar tool AI yang diizinkan.

PraktikAlasan
Review semua kode hasil AI sebelum commitAI bisa menghasilkan kode yang terlihat benar tapi salah logika
Jangan tempelkan secret/credential ke promptData terkirim ke cloud pihak ketiga
Batasi AI pada file non-sensitiveManifest infra, script, dan kode internal publik tidak berisiko
Verifikasi dependency yang disarankan AIAI bisa menyarankan package yang salah nama atau typosquatting
Aktifkan audit trail (log prompt)Perusahaan sering mewajibkan bukti kepatuhan
Tetapkan acceptance criteria untuk kode AIKode AI harus lulus review code seperti kode manusia

Important

Dalam konteks DevOps khususnya: jangan pernah biarkan AI menulis IaC (Terraform, Kubernetes manifest) tanpa review menyeluruh. Satu saran yang salah — misalnya securityContext.privileged: true atau port yang terbuka ke internet — bisa menjadi celah keamanan produksi. AI membantu menulis, manusia tetap bertanggung jawab atas apa yang di-deploy.

Kesalahan Umum (Common Pitfalls)

KesalahanGejalaSolusi
Belum login/otentikasiSaran tidak pernah muncul, log error unauthorizedJalankan :Copilot auth lalu ikuti instruksi login browser
Saran muncul terlalu agresifGhost text terus berkedip mengganggu mengetikKurangi auto_trigger, set debounce, atau matikan untuk filetype tertentu
Keymap bentrok antar pluginCtrl+j dipakai cmp & Copilot sekaligusGabungkan logika dalam satu handler seperti contoh di atas
Memakai plugin palsu / typo namaConfig error, atau behavior tidak sesuaiVerifikasi source plugin; cek dokumentasi resmi
Menerima saran tanpa reviewBug halus masuk produksiTerapkan rule review wajib sebelum commit
Data sensitif bocor ke promptRahasia terkirim ke cloudPantau prompt; jangan tempel secret; gunakan model lokal (Ollama) untuk data sensitif
Avante butuh binary eksternalError saat build / runPastikan make terinstall; gunakan build = "make" seperti di spec

Note

Jika kalian bekerja dengan kode yang sangat sensitif dan perusahaan melarang AI berbasis cloud, alternatifnya adalah model lokal via Ollama. Jalankan model seperti codegemma atau qwen2.5-coder di mesin lokal, lalu sambungkan melalui provider ollama pada Avante. Kecepatannya lebih rendah daripada cloud, tetapi data tidak pernah meninggalkan mesin.

Penutup

Pada episode 21 ini kita telah mengintegrasikan tiga pendekatan AI coding assistant ke dalam Neovim: GitHub Copilot untuk autocomplete dengan keymap navigasi saran yang lengkap, Codeium sebagai alternatif freemium, dan Avante untuk pengalaman AI chat bergaya Cursor dengan kemampuan edit langsung. Kita juga membahas workflow AI yang sehat — dari menerima saran, mereview dengan git diff, hingga menulis test — serta praktik keamanan yang tidak boleh ditawar: jangan pernah menempelkan rahasia ke AI, dan selalu review kode hasil AI sebelum commit.

Ingat posisi kalian dalam rantai: AI adalah co-pilot, bukan pilot. Kapal tetap dikemudikan oleh kalian.

Setelah editor bisa menulis kode dengan cepat dan dibantu AI, kita perlu kemampuan sebaliknya: menemukan dan memperbaiki bug dengan benar. Di episode 22 selanjutnya, kita akan membahas Debugging Menggunakan DAP (Debug Adapter Protocol) dengan nvim-dap dan nvim-dap-ui — mengubah Neovim menjadi debugger interaktif setara IDE GUI. Pastikan tetap semangat!