
Neovim là một trình soạn thảo mã nguồn mở, nhánh riêng của Vim được thiết kế để cải thiện khả năng mở rộng và hiệu suất nhờ viết lại phần lớn mã nguồn bằng C, dùng Lua cho scripting và libuv cho xử lý I/O bất đồng bộ. Bài viết này giới thiệu Neovim từ góc độ người dùng thực tế: cách cấu hình, mở rộng bằng plugin, và những lợi ích cụ thể mà một lập trình viên có được khi chuyển từ Vim sang Neovim.
Neovim bắt đầu ra đời năm 2014, mục tiêu không phải thay thế hoàn toàn Vim mà là cung cấp một nền tảng hiện đại hơn để phát triển tính năng mới mà không phải vướng vào mã nguồn cũ và hệ thống macro khó mở rộng của Vim. Kết quả là một trình soạn thảo chạy được cả trong terminal lẫn trên giao diện đồ hoạ, có sẵn Language Server Protocol, Tree-sitter cho tô màu cú pháp ngữ nghĩa, và terminal emulator tích hợp ngay trong một cửa sổ chia nhỏ.

Lịch sử và mục tiêu thiết kế
Thiago de Arruda khởi đầu dự án bằng việc đọc lại toàn bộ mã nguồn Vim và tìm cách tái cấu trúc để việc mở rộng plugin trở nên dễ dàng hơn. Điểm mấu chốt là loại bỏ phần phụ thuộc vào Vim script, đồng thời đưa Lua vào làm ngôn ngữ cấu hình và viết plugin.
Neovim kế thừa gần như trọn vẹn các tính năng quen thuộc của Vim như chế độ normal, chế độ visual, lệnh ex và macro, rồi bổ sung những thứ chỉ làm được khi viết lại từ đầu:
- Language Server Protocol tích hợp sẵn: kết nối với các server như pyright, rust-analyzer, gopls để có hoàn thành mã, nhảy tới định nghĩa và đổi tên hàm ngay trong trình soạn thảo.
- Bộ phân tích Tree-sitter: phân tích cú pháp theo cây thay vì dựa trên biểu thức chính quy, giúp tô màu chính xác hơn và thụt đầu dòng thông minh.
- Terminal emulator tích hợp: mở một shell ngay trong cửa sổ chia nhỏ mà không phải thoát khỏi Neovim.
- Job control và hàm bất đồng bộ: chạy nền trình kiểm tra mã, trình sắp xếp định dạng mà không làm treo giao diện.
Tài liệu chính thức nằm tại hướng dẫn sử dụng Neovim, còn mã nguồn mở được phát triển công khai trên kho neovim/neovim.

Khác biệt thực tế khi dùng Neovim so với Vim
Khi mở một dự án lớn với hàng nghìn tệp, Neovim thường khởi động nhanh hơn vì loại bỏ mã Vim script dư thừa và tối ưu lại đường tải plugin. Với Language Server Protocol có sẵn, bạn không cần cài thêm plugin như YouCompleteMe hay coc.nvim để có khả năng hiểu ngôn ngữ. Chỉ cần có tệp thực thi của server ngôn ngữ và vài dòng cấu hình Lua là đủ.
Tree-sitter làm việc trên cây cú pháp thay vì chỉ tô màu theo từ khóa. Nhờ vậy mà mã vẫn hiển thị đúng khi bạn viết chuỗi nhiều dòng trong JavaScript hay khối JSX, và phép chọn khối cũng chính xác hơn vì nó bỏ qua chú thích cùng chuỗi.
Terminal tích hợp cho phép chạy lệnh :terminal để có một shell trong cùng một tab, rồi dùng các tổ hợp phím điều khiển mà không cần đổi ứng dụng. Điều này rất tiện khi debug: biên dịch, chạy thử và đọc log đều diễn ra trong cùng một cửa sổ, giữ nguyên ngữ cảnh biên tập mã.
Vì Lua là ngôn ngữ script chính, viết plugin trở nên dễ hơn hẳn. Bạn gọi được toàn bộ API Neovim bằng Lua, không phải học cú pháp Vim script khó đọc. Nhiều bộ khung cấu hình phổ biến như LazyVim hay NvChad đều viết bằng Lua và cung cấp bộ thiết lập sẵn để bắt đầu nhanh.
Cài đặt và cấu hình cơ bản
Trên các hệ điều hành phổ biến, bạn có thể cài Neovim bằng trình quản lý gói:
# Ubuntu và Debian
sudo apt install neovim
# macOS dùng Homebrew
brew install neovim
# Windows dùng Chocolatey
choco install neovim
Sau khi cài xong, chạy nvim sẽ mở một vùng soạn thảo trống. Để cấu hình, tạo thư mục ~/.config/nvim với tệp init.lua như sau:
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
-- Cai dat plugin tu dong bang lazy.nvim
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.runtimepath:prepend(lazypath)
require("lazy").setup({
{ "folke/tokyonight.nvim" },
{ "nvim-lua/plenary.nvim" },
{ "neovim/nvim-lspconfig" },
})
Đoạn trên cài sẵn ba thứ: bảng màu Tokyo Night, thư viện tiện ích plenary.nvim và cấu hình Language Server. Từ đây bạn thêm plugin khác tùy ngôn ngữ đang làm việc.
So sánh tổng quan
| Khía cạnh | Neovim | Vim |
| Khởi động | Nhanh hơn khi nạp nhiều plugin | Chậm hơn với cấu hình nặng |
| Ngôn ngữ cấu hình | Lua, dễ đọc và dễ viết | Vim script, cú pháp khó |
| Language Server | Có sẵn, chỉ cần cài server | Phải cài plugin bên thứ ba |
| Tree-sitter | Có sẵn | Phải cài plugin riêng |
| Terminal tích hợp | Có sẵn | Mở terminal riêng hoặc cài plugin |
| Định hướng phát triển | Bổ sung tính năng mạnh mỗi năm | Ổn định, ít thay đổi lớn |
Một lợi ích ít được nhắc tới là cộng đồng Neovim thường không ngần ngại thay đổi hành vi cũ, vì họ luôn giữ mức tương thích với Vim thấp nhất có thể. Nhiều tính năng mới xuất hiện ở Neovim trước, sau đó mới được port sang Vim nếu người dùng thực sự cần.
Kết luận
Neovim không chỉ là một bản sao cập nhật của Vim mà là một bước tái thiết có chủ đích trong thế giới trình soạn thảo mã nguồn mở. Với Language Server Protocol, Tree-sitter và terminal tích hợp, nó tạo ra một môi trường lập trình mượt mà mà không cần dựa vào hệ thống plugin rời rạc. Nếu bạn đang dùng Vim và thấy bị giới hạn bởi Vim script hoặc thiếu tính năng hiện đại, hãy dành một tuần thử Neovim, khả năng cao bạn sẽ không muốn quay lại.
