# ✅ Checkpoint: Nền tảng cấu hình Lua và plugin manager

By 3T1C



## Quiz

1. Trên Windows 11, Neovim đọc file cấu hình `init.lua` ở thư mục nào?
   - `%LOCALAPPDATA%/nvim-data`
   - `C:/Users/<tên>/.config/nvim`
   - `%LOCALAPPDATA%/nvim`, tức `C:/Users/<tên>/AppData/Local/nvim`
   - `%APPDATA%/nvim`, tức `C:/Users/<tên>/AppData/Roaming/nvim`
2. Bạn sửa nội dung `lua/config/options.lua`, chạy `:source $MYVIMRC` nhưng thay đổi không có tác dụng. Nguyên nhân đúng nhất là gì?
   - Module đã được `require` nên bị cache trong `package.loaded`; cần restart Neovim hoặc `:luafile %` khi đang mở chính file đó
   - `init.lua` phải nằm trong thư mục `lua/` mới được nạp lại
   - Phải chạy `:source $MYVIMRC` hai lần liên tiếp
   - File phải lưu với CRLF thì Neovim mới đọc lại
3. Trong plugin spec của lazy.nvim, khai báo `cmd = "Telescope"` và `keys = { ... }` có tác dụng gì?
   - Plugin chỉ load khi gõ command hoặc bấm keybinding tương ứng (lazy loading)
   - Plugin tự động cài `dependencies` mà không cần khai báo
   - Plugin load ngay khi khởi động để sẵn sàng nhận lệnh
   - Plugin bị tắt hoàn toàn cho tới khi chạy `:Lazy sync`
4. Triệu chứng: bấm `<leader>ff` không có gì xảy ra, nhưng bấm `\ff` lại chạy. Nguyên nhân và cách sửa đúng?
   - `vim.g.mapleader` được set quá muộn, sau khi plugin đã bind phím với leader mặc định `\`; cần đặt nó trước `require("lazy").setup()`
   - Keymap viết sai cú pháp, cần viết lại bằng `vim.keymap.set`
   - Space không dùng được làm leader trên Windows 11, phải dùng `,`
   - Cần bật `remap = true` cho mọi keymap
5. Những phát biểu nào đúng về lazy.nvim và `vim.pack`? (chọn tất cả đáp án đúng)
   - `vim.pack` có sẵn từ Neovim 0.12 và cài qua `vim.pack.add({ "https://github.com/user/repo" })`
   - `vim.pack` hỗ trợ lazy loading theo `event`, `cmd`, `keys` giống lazy.nvim
   - Lazy.nvim cài plugin vào thư mục `lazy` bên trong `stdpath('data')`, tức `~/AppData/Local/nvim-data/lazy`
   - Khai báo cả `opts` và `config` cho cùng một plugin khiến `setup()` chạy hai lần, dễ reset state
   - File trong `lua/plugins/` thiếu `return` thì plugin vẫn được cài bình thường
   - Nên chạy song song cả lazy.nvim và `vim.pack` trong cùng một config để linh hoạt hơn
6. Những thực hành nào đúng khi viết keymap bằng `vim.keymap.set`? (chọn tất cả đáp án đúng)
   - Dùng `<cmd>write<cr>` thay `:write<cr>` vì `<cmd>` không đi qua cmdline và không đổi mode
   - Đặt `remap = true` cho mọi keymap vì mặc định `vim.keymap.set` là remap
   - Chia namespace phím theo tên plugin để dễ nhớ plugin nào dùng phím nào
   - Phím LSP như `gd` hay rename nên map buffer-local trong autocmd `LspAttach` với `buffer = ev.buf`
   - Luôn đặt `desc` để `:map`, which-key và Telescope keymaps đọc được mô tả
7. Lệnh dùng để in ra đường dẫn thư mục cấu hình Neovim là `:echo ____` (điền biểu thức bên trong dấu ngoặc, ví dụ dạng `stdpath('...')`).
8. Trong `init.lua`, thứ tự `require` hợp lý là: options, rồi keymaps, rồi plugin manager. Tên module của plugin manager trong khung bài học là `require('config.____')`.
9. Hãy tự đánh giá: bạn có dựng lại được bộ khung cấu hình Module 1 từ đầu trên máy Windows 11 của mình không? Mở Neovim và kiểm tra từng mục dưới đây.
10. Tự đánh giá khả năng mở rộng config: bạn có thể tự thêm một plugin mới vào hệ thống hiện tại mà không làm rối `init.lua` không?


---

## Contents

Part of [🛠️ Config neovim trên win 11](https://everwise.study/courses/config-neovim-tren-win-11.md)

- **🧱 Nền tảng cấu hình bằng Lua và plugin manager**
  - [📁 Bộ khung init.lua và cách tổ chức file cấu hình trên Windows 11](https://everwise.study/courses/config-neovim-tren-win-11/bo-khung-init-lua-tren-windows-11.md)
  - [📦 Quản lý plugin với lazy.nvim và hướng mở rộng với vim.pack](https://everwise.study/courses/config-neovim-tren-win-11/quan-ly-plugin-lazy-nvim-va-vim-pack.md) (sign-in required)
  - [⌨️ Keybinding, leader key và workflow làm việc hiệu quả](https://everwise.study/courses/config-neovim-tren-win-11/keybinding-leader-key-va-workflow.md)
  - [✅ Checkpoint: Nền tảng cấu hình Lua và plugin manager](https://everwise.study/courses/config-neovim-tren-win-11/checkpoint-nen-tang-cau-hinh-lua.md) — this lesson
- **🧠 Đưa Neovim lên mức IDE: LSP, Telescope, Treesitter**
  - [🔍 LSP, autocomplete và diagnostics](https://everwise.study/courses/config-neovim-tren-win-11/lsp-autocomplete-va-diagnostics.md)
  - [🔭 Telescope: tìm file và grep trong dự án](https://everwise.study/courses/config-neovim-tren-win-11/telescope-tim-file-va-grep.md)
  - [🌳 Treesitter: cú pháp, highlight và folding](https://everwise.study/courses/config-neovim-tren-win-11/treesitter-cu-phap-va-folding.md)
  - [✅ Checkpoint: LSP, Telescope và Treesitter](https://everwise.study/courses/config-neovim-tren-win-11/checkpoint-lsp-telescope-treesitter.md)
- **🚀 Capstone: cấu hình hoàn chỉnh dùng cho công việc thật**
  - [🌿 Tích hợp Git và terminal trong Neovim](https://everwise.study/courses/config-neovim-tren-win-11/tich-hop-git-va-terminal.md)
  - [🩺 Khắc phục lỗi đặc thù trên Windows 11](https://everwise.study/courses/config-neovim-tren-win-11/khac-phuc-loi-dac-thu-tren-windows-11.md)
  - [🏗️ Capstone: đóng gói cấu hình Neovim cho công việc thật](https://everwise.study/courses/config-neovim-tren-win-11/capstone-dong-goi-cau-hinh-neovim.md) (premium content)
  - [✅ Checkpoint: Capstone và xử lý sự cố trên Windows](https://everwise.study/courses/config-neovim-tren-win-11/checkpoint-capstone-windows.md) (premium content)
- [Course cheatsheet](https://everwise.study/courses/config-neovim-tren-win-11/cheatsheet.md) (premium content)
