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.

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.
Sebelum memilih plugin, pahami mekanisme kerjanya. Semua AI coding assistant modern bekerja dalam dua mode utama:
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.
copilot.lua + copilot-cmpGitHub 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:
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:
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" },
}
endNote
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.
Setelah terintegrasi, alur kerjanya:
auto_trigger = true). Ghost text muncul dengan teks berwarna redup di samping kursor.Ctrl+l menerima saran penuh.Ctrl+j / Ctrl+k berpindah ke saran alternatif berikutnya/sebelumnya.Ctrl+u membatalkan saran.Coba tulis komentar atau nama fungsi yang jelas di Go, lalu perhatikan saran yang muncul. Contoh nyata:
// 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.
codeium.nvimJika 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:
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.
avante.nvimSetelah 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:
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:
Ctrl+i untuk memulai inline prompt di samping selection.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.
Mari kita rangkai menjadi alur kerja sehari-hari:
| Tahap | Aksi | Tool |
|---|---|---|
| Menulis kode baru | Biarkan saran muncul, terima dengan Ctrl+l | Copilot / Codeium |
| Menolak saran | Ctrl+u untuk dismiss | Copilot / Codeium |
| Minta penjelasan | Pilih kode → AvanteAsk → tanya "jelaskan fungsi ini" | Avante |
| Refactor | Pilih kode → AvanteEdit → instruksi refactor | Avante |
| Review hasil AI | :w !git diff atau diffview | Git / diffview |
| Tulis test | Komentar "tulis unit test untuk fungsi X" | Copilot / Avante |
| Fitur | GitHub Copilot | Codeium | Avante |
|---|---|---|---|
| Mode utama | Autocomplete | Autocomplete | Chat + Edit |
| Biaya | Berbayar (gratis untuk tertentu) | Freemium | Gratis (model tergantung provider) |
| Integrasi cmp | Ya (via copilot-cmp) | Ya (native) | Ya (untuk prompt) |
| Konteks repository | Ya | Ya | Bergantung provider |
| Lokal / offline | Tidak | Tidak | Bisa via Ollama |
| UI chat | Panel terpisah | Chat terpisah | Sidebar / floating seperti Cursor |
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.
| Praktik | Alasan |
|---|---|
| Review semua kode hasil AI sebelum commit | AI bisa menghasilkan kode yang terlihat benar tapi salah logika |
| Jangan tempelkan secret/credential ke prompt | Data terkirim ke cloud pihak ketiga |
| Batasi AI pada file non-sensitive | Manifest infra, script, dan kode internal publik tidak berisiko |
| Verifikasi dependency yang disarankan AI | AI bisa menyarankan package yang salah nama atau typosquatting |
| Aktifkan audit trail (log prompt) | Perusahaan sering mewajibkan bukti kepatuhan |
| Tetapkan acceptance criteria untuk kode AI | Kode 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 | Gejala | Solusi |
|---|---|---|
| Belum login/otentikasi | Saran tidak pernah muncul, log error unauthorized | Jalankan :Copilot auth lalu ikuti instruksi login browser |
| Saran muncul terlalu agresif | Ghost text terus berkedip mengganggu mengetik | Kurangi auto_trigger, set debounce, atau matikan untuk filetype tertentu |
| Keymap bentrok antar plugin | Ctrl+j dipakai cmp & Copilot sekaligus | Gabungkan logika dalam satu handler seperti contoh di atas |
| Memakai plugin palsu / typo nama | Config error, atau behavior tidak sesuai | Verifikasi source plugin; cek dokumentasi resmi |
| Menerima saran tanpa review | Bug halus masuk produksi | Terapkan rule review wajib sebelum commit |
| Data sensitif bocor ke prompt | Rahasia terkirim ke cloud | Pantau prompt; jangan tempel secret; gunakan model lokal (Ollama) untuk data sensitif |
| Avante butuh binary eksternal | Error saat build / run | Pastikan 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.
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!