✅ 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?

Sign in to submit answers.