jvinhit//lab

Search posts

Type to search across journal entries.

navigate open esc close

Neovim · Part 1 — Roadmap chuyển từ VSCode sang Nvim

Lộ trình học Neovim 2025-2026: mental model, setup hiện đại, kỹ năng cần luyện, stack plugin nên dùng và cách đi từ gà mờ đến pro.

Đây là Phần 1 của series 12 bài đưa bạn từ “mở Vim rồi không thoát được” đến dùng Neovim như editor chính thay VSCode.

Mục tiêu không phải biến bạn thành người sưu tầm plugin. Mục tiêu là: mở project thật, đọc code nhanh, sửa code tự tin, nhảy định nghĩa, rename symbol, format/lint, chạy test, làm Git, debug, và bảo trì dotfiles mà không sợ vỡ.

Tại ngày 2026-07-09, baseline của series là:

  • Neovim stable 0.12.x.
  • Lua config thay vì Vimscript cho cấu hình mới.
  • lazy.nvim làm plugin manager thực dụng.
  • Native LSP mới: vim.lsp.config()vim.lsp.enable().
  • mason.nvim để cài tool ngoài như LSP, formatter, linter.
  • Completion hiện đại với blink.cmp stable v1.
  • Formatter/linter tách riêng bằng conform.nvimnvim-lint.
  • Treesitter theo hướng core API của Neovim, tránh tư duy config cũ.

Nếu bạn đọc sau mốc này, hãy kiểm tra lại nvim --version và release page. Neovim đang đổi rất nhanh.


Vì sao chuyển từ VSCode sang Nvim?

VSCode mạnh vì mọi thứ hiện sẵn: sidebar, command palette, file explorer, extensions, terminal, Git, debug. Neovim mạnh ở chỗ khác:

  • thao tác text cực nhanh bằng modal editing;
  • chạy tốt trong terminal, SSH, container, máy yếu;
  • config là code Lua, version được bằng Git;
  • LSP/formatter/linter/debug đều là các lớp ghép được;
  • editor trở thành một phần của workflow shell, không phải một app tách biệt.

Điểm đau khi mới chuyển là bạn mất đi “đường ray” quen thuộc của VSCode. Series này sẽ dựng lại đường ray đó trong Neovim, từng lớp một.


Bản đồ series

PhầnChủ đềBạn đạt được
1RoadmapBiết học gì, bỏ gì, setup theo chuẩn nào
2Cài đặt & cấu trúc config~/.config/nvim sạch, chạy được
3Modal editingDi chuyển, sửa text, dùng operator/motion
4Files, buffers, windowsKhông lạc trong project lớn
5Plugin architectureDùng lazy.nvim, chia module đúng
6LSP & completionGần trải nghiệm VSCode IntelliSense
7Format, lint, TreesitterCode sạch, highlight tốt, ít lệ thuộc
8Search & refactorFuzzy find, grep, quickfix, rename
9Git, terminal, test, debugWorkflow làm việc hằng ngày
10Migration từ VSCodeMap thói quen VSCode sang Nvim
11Performance & dotfilesUpdate, pin, debug config, sync máy
12CapstoneMột setup hoàn chỉnh để dùng thật

Stack đề xuất 2025-2026

Đây là stack “ít nhưng đủ”:

Nhu cầuLớp chínhVì sao
Plugin managerlazy.nvimổn định, có lockfile, lazy-load tốt
Cài external toolsmason.nvimquản lý LSP/DAP/linter/formatter trong Nvim
LSP configsnvim-lspconfig + native vim.lsp.*dùng API mới, tránh style cũ
Completionblink.cmp v1 stablenhanh, ít phụ thuộc, hỗ trợ LSP/snippet/path/buffer
Formatconform.nvimkiểm soát formatter theo filetype tốt
Lintnvim-lintbổ sung CLI linter ngoài LSP
SyntaxTreesitter core + parser toolinghighlight theo AST, folding, selection
FinderTelescope hoặc Snacks pickerthay Command Palette + Quick Open
Gitgitsigns.nvimhunk, blame, stage/reset trong buffer
File exploreroil.nvim hoặc mini.filesthao tác file như edit buffer

Điều quan trọng: mỗi plugin phải trả lời một nhu cầu thật. Nếu bạn chưa biết plugin giải quyết việc gì, đừng cài vội.


Tư duy khác VSCode

VSCode hỏi: “Bạn muốn click vào UI nào?”

Neovim hỏi: “Bạn muốn biến text hiện tại thành text gì?”

Ví dụ:

ViệcVSCodeNvim
Xóa trong ngoặcchọn text bằng chuộtdi(
Đổi trong dấu nháyclick, kéo, gõ lạici"
Di chuyển tới function kếoutline/minimap]m, search, Treesitter textobject
Mở filesidebar hoặc Cmd+Ppicker, buffer, :edit
Rename symbolF2grn hoặc keymap riêng
Code actionbóng đèngra

Người mới thường cố biến Neovim thành VSCode thu nhỏ. Đừng làm vậy. Hãy giữ các năng lực VSCode cần thiết, nhưng học ngôn ngữ thao tác text của Vim.


Những gì không nên học ngay

Đừng bắt đầu bằng:

  • tự viết statusline phức tạp;
  • cài 80 plugin theo dotfiles của người khác;
  • học Vimscript sâu;
  • tối ưu startup khi config mới có 10 plugin;
  • tranh luận distro nào tốt nhất.

Hãy bắt đầu bằng:

  1. mở, sửa, lưu, thoát;
  2. di chuyển không dùng phím mũi tên;
  3. text object: word, quote, bracket, paragraph;
  4. buffer/window;
  5. LSP cơ bản;
  6. search/grep;
  7. Git/test/terminal.

Checklist trước khi bắt đầu

Cài các tool nền:

nvim --version
git --version
rg --version
fd --version
node --version
npm --version

Khuyến nghị:

  • Neovim 0.12.x nếu có thể.
  • git, ripgrep, fd, curl hoặc wget.
  • Nerd Font nếu muốn icon đẹp.
  • Node.js nếu làm frontend.
  • Một terminal tốt: WezTerm, Ghostty, Alacritty, iTerm2, Windows Terminal.

Nếu thiếu rg hoặc fd, fuzzy finder vẫn chạy nhưng trải nghiệm grep/file search sẽ kém hơn hẳn.


Cheatsheet nhập môn

Phím/lệnhÝ nghĩa
ivào Insert mode
Escvề Normal mode
:wlưu
:qthoát
:wqlưu và thoát
:q!thoát bỏ thay đổi
h j k ltrái, xuống, lên, phải
w b enhảy theo word
0 ^ $đầu dòng, ký tự đầu, cuối dòng
gg Gđầu file, cuối file
/textsearch trong file
n Nkết quả search kế/trước
uundo
<C-r>redo

Quy tắc luyện: mỗi ngày chỉ thêm 3-5 phím mới. Đừng học bằng bảng dài; học bằng việc sửa code thật.


Bài tập

  1. Cài Neovim và chạy :checkhealth.
  2. Mở một project thật bằng nvim ., mở một file, sửa một dòng, lưu, thoát.
  3. Trong một file bất kỳ, không dùng chuột và không dùng phím mũi tên trong 10 phút.
  4. Ghi lại 5 thao tác VSCode bạn dùng nhiều nhất. Series sẽ map từng thao tác sang Nvim.
Gợi ý kiểm tra
:checkhealth
:echo stdpath('config')
:echo stdpath('data')
:version

Nếu stdpath('config') trả về ~/.config/nvim, đó là nơi ta sẽ tạo config ở phần sau.


Nguồn cập nhật

Các bài trong series này được đối chiếu với nguồn chính:


Điều cốt lõi

Chuyển sang Neovim không phải đổi theme editor. Đó là đổi cách nghĩ: từ click UI sang nói chuyện với text bằng lệnh ngắn. Series này sẽ dựng editor đủ hiện đại để bạn không thua VSCode, nhưng vẫn giữ được sức mạnh thật của Vim.