Apa itu NeoVim (Nvim)

Neovim adalah editor teks yang merupakan pengembangan dari Vim dengan tujuan membuatnya lebih modern, fleksibel, dan mudah dikonfigurasi. Dibandingkan dengan Vim, Neovim memiliki sistem plugin yang lebih canggih dengan dukungan bahasa pemrograman Lua, memungkinkan integrasi fitur seperti LSP (Language Server Protocol) untuk autocompletion dan debugging. Selain itu, Neovim hadir dengan antarmuka yang lebih modern, mendukung fitur seperti status bar yang lebih informatif, file explorer terintegrasi, serta pencarian file yang lebih cepat. Dibangun agar lebih ringan dan efisien, Neovim juga mempermudah pengelolaan plugin dengan Lazy.nvim, dibandingkan Vim yang masih menggunakan sistem plugin lama. Dengan kata lain, Neovim menawarkan pengalaman yang lebih kuat dan fleksibel dibandingkan Vim, menjadikannya pilihan utama bagi banyak programmer dan pengguna terminal yang ingin efisiensi tanpa kehilangan fleksibilitas.

Instalasi NeoVim

Untuk panduan instalasi versi terbaru dari NeoVim kita dapat mengunjungi github resminya di Github Neovim.

Namun kita juga dapat membuat installer NeoVim ini sendiri, berikut adalah cara nya.

Install Software Pendukung

sudo apt-get install git cmake

Clone Repository NeoVim

git clone https://github.com/neovim/neovim.git
cd neovim

Ubah ke Versi yang stable

git checkout stable

Build NeoVim (Mungkin Memerlukan Waktu)

make CMAKE_BUILD_TYPE=RelWithDebInfo
cd build
cpack -G DEB

Install NeoVim .deb

Pertama masukan ini di dalam terminal

sudo dpkg -i nvim

Lalu tinggal di pencet keyboard TAB, pastikan command nya memiliki akhir .deb, setelah itu tunggu prosess instalasi sampai selesai. Dan jika telah selesai maka kita tinggal melakukan pengecekan versi NeoVim yang telah kita instalasi menggunakan nvim --version. Jika muncul, maka instalasi berhasil. Dan jika ingin menggunakan NeoVim kita tinggal membukanya dengan perintah nvim.

Membuat Setingan Nvim

Buat folder nvim

mkdir ~/.config/nvim

Clone Plugin Manager

git clone https://github.com/folke/lazy.nvim ~/.config/nvim/lazy

Buat file init.lua

nvim ~/.config/nvim/init.lua

Masukan code berikut ke file init.lua

-- PASTEKAN FILE INI KE ~/.config/nvim/init.lua
-- DAN JALANKAN :Lazy untuk menginstall plugin

-- Pastikan sudah install Lazy.nvim (Plugin Manager)
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({"git", "clone", "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath})
end
vim.opt.rtp:prepend(lazypath)

-- Pengaturan dasar
vim.opt.number = true           -- Tampilkan nomor baris
vim.opt.relativenumber = false  -- Tampilkan nomor baris relatif
vim.opt.autoindent = true       -- Auto indentasi
vim.opt.smartindent = true      -- Smart indentasi
vim.opt.expandtab = true        -- Gunakan spasi, bukan tab
vim.opt.shiftwidth = 2          -- Ukuran indentasi
vim.opt.tabstop = 2             -- Ukuran tab
vim.opt.wrap = true             -- Nonaktifkan word wrap
vim.opt.linebreak = true        -- Hindari memotong kata di tengah
vim.opt.showbreak = "↪ "        -- Tampilkan ikon saat baris terputus
vim.opt.autowrite = true        -- Auto save saat berpindah buffer
vim.opt.formatoptions:append("cro") -- Auto format paragraf

-- Load Plugin
require("lazy").setup({
  { "nvim-tree/nvim-tree.lua", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function()
      require("nvim-tree").setup({
        renderer = {
          icons = {
            show = {
              file = true,
              folder = true,
              folder_arrow = true,
            },
          },
        },
      })
    end
  },
  { "nvim-lualine/lualine.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function()
      require("lualine").setup({ options = { icons_enabled = true } })
    end
  },
  { "akinsho/bufferline.nvim", dependencies = { "nvim-tree/nvim-web-devicons" }, config = function()
      require("bufferline").setup({ options = { show_buffer_icons = true } })
    end
  },
  { "folke/tokyonight.nvim", config = function()
      vim.cmd.colorscheme "tokyonight-night"
    end
  },
  { "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" }, config = function()
      require("telescope").setup()
    end
  },
  { "hrsh7th/nvim-cmp", dependencies = { "hrsh7th/cmp-nvim-lsp", "L3MON4D3/LuaSnip" }, config = function()
      local cmp = require("cmp")
      cmp.setup({
        mapping = {
          ["<C-Space>"] = cmp.mapping.complete(),
        }
      })
    end
  },
  { "neovim/nvim-lspconfig", config = function()
      require("lspconfig").ts_ls.setup{}
    end
  },
  { "lewis6991/gitsigns.nvim", config = function()
      require("gitsigns").setup()
    end
  },
  { "folke/which-key.nvim", config = function()
      require("which-key").setup()
    end
  },
  { "stevearc/conform.nvim", config = function()
      require("conform").setup({
        format_on_save = {
          timeout_ms = 500,
          lsp_fallback = true,
        },
        formatters_by_ft = {
          lua = { "stylua" },
          javascript = { "prettier" },
          typescript = { "prettier" },
        }
      })
    end
  }
})

-- Keybindings ala VSCode
vim.api.nvim_set_keymap("n", "<C-p>", ":Telescope find_files<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<C-f>", ":Telescope live_grep<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "<C-Space>", "cmp#complete()", { expr = true })

Restart Nvim

Keluar dari nvim menggunakan :q, lalu masuk lagi ke nvim, dan tunggu instalasi otomatis nya sampai selesai.