Neovim là gì: Trình soạn thảo mở nâng cấp từ Vim

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

Man hinh gioi thieu ban dev cua Neovim hien thi logo va thong tin phien ban

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.

Man hinh Neovim dung bo mau Material Theme voi thanh trang thai tuy chinh

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.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Passkey là gì: Đăng nhập không mật khẩu với FIDO2

Passkey là gì? Passkey (khóa truy cập) là phương thức đăng nhập không dùng mật khẩu, dựa trên tiêu chuẩn FIDO2 và WebAuthn. Thay vì gửi một chuỗi ký tự…

Xem thêm

Hướng dẫn thiết lập môi trường phát triển với Docker Compose cho microservices

Hướng dẫn thiết lập môi trường phát triển với Docker Compose cho microservices Trong thời đại ứng dụng hiện đại, microservices đã trở thành kiến trúc tiêu chuẩn để xây…

Xem thêm

Bảo mật iPhone: 10 mẹo bảo vệ dữ liệu cá nhân hiệu quả

Bảo mật iPhone: 10 mẹo bảo vệ dữ liệu cá nhân hiệu quả Bảo mật iPhone là chủ đề quan tâm của nhiều người dùng Apple, đặc biệt khi điện…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất