Neovim · Part 10 — Migration workflow từ VSCode
Map thói quen VSCode sang Neovim: explorer, command palette, terminal, search, multicursor, snippets, settings, extensions và lộ trình 30 ngày.
Chuyển editor thất bại thường không phải vì Neovim thiếu tính năng. Nó thất bại vì bạn đổi quá nhiều thói quen cùng lúc.
Phần này map VSCode sang Neovim để bạn chuyển có kiểm soát.
Bảng mapping nhanh
| VSCode | Neovim |
|---|---|
| Command Palette | Telescope commands hoặc : |
| Quick Open | <leader>ff |
| Search project | <leader>fg |
| Explorer | oil.nvim, mini.files, hoặc picker |
| Tabs | buffers |
| Split editor | windows |
| Workspace layout | tab pages |
| Problems | diagnostics + quickfix/location list |
| Source Control | gitsigns + git CLI |
| Integrated terminal | :terminal hoặc tmux |
| Extensions | lazy.nvim plugin specs |
| settings.json | Lua files |
| keybindings.json | vim.keymap.set |
| IntelliSense | LSP + completion |
| Format on save | conform.nvim |
Đừng copy toàn bộ keybindings VSCode
Bạn có thể map Cmd+P thành picker, nhưng đừng cố biến mọi phím thành VSCode.
Nên giữ:
<leader>ff: find files;<leader>fg: live grep;<leader>fb: buffers;<leader>f: format;<leader>ca: code action nếu không dùnggra;<leader>rn: rename nếu không dùnggrn.
Nên học native:
ci",di(,yap;/,*,n,N;<C-o>,<C-i>;- quickfix
:copen,:cnext; .repeat.
Nếu mọi key đều giống VSCode, bạn sẽ bỏ lỡ lý do chuyển sang Vim.
File explorer: bỏ sidebar dần dần
Tuần đầu bạn có thể cần file explorer. Không sao.
Nhưng hãy luyện flow này:
- mở project bằng
nvim .; - tìm file bằng
<leader>ff; - tìm text bằng
<leader>fg; - mở parent directory bằng
-nếu dùng Oil; - chỉ dùng explorer khi thật sự cần rename/move file hàng loạt.
Sau vài tuần, sidebar sẽ ít cần hơn.
Multi-cursor thì sao?
Vim có nhiều cách thay multi-cursor:
| Nhu cầu | Vim way |
|---|---|
| sửa cùng word trong file | :%s/old/new/gc |
| sửa symbol code | LSP rename |
| thêm prefix nhiều dòng | visual block <C-v> |
| thao tác lặp có logic | macro |
| đổi nhiều occurrence chọn lọc | search + cgn + . |
Ví dụ cgn:
- search
/oldName; - gõ
cgnnewName<Esc>; - bấm
ntới occurrence kế; - bấm
.nếu muốn đổi occurrence đó.
Đây là multi-cursor có kiểm soát.
Snippets
VSCode snippets rất tiện. Trong Neovim, blink.cmp có thể dùng native vim.snippet, friendly-snippets, LuaSnip hoặc mini.snippets.
Khuyến nghị ban đầu:
- dùng snippets có sẵn từ
friendly-snippets; - đừng tự viết snippet engine ngay;
- chỉ thêm snippet riêng khi bạn lặp lại cùng pattern nhiều lần.
Snippet tốt là pattern bạn đã dùng 20 lần, không phải thứ bạn tưởng sẽ dùng.
Settings sang Lua
VSCode:
{
"editor.formatOnSave": true,
"editor.tabSize": 2,
"files.trimTrailingWhitespace": true
}
Neovim:
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
vim.opt.expandtab = true
vim.api.nvim_create_autocmd("BufWritePre", {
callback = function()
local save = vim.fn.winsaveview()
vim.cmd([[%s/\s\+$//e]])
vim.fn.winrestview(save)
end,
})
Nhưng nếu formatter đã trim whitespace, đừng duplicate logic. Config càng ít nguồn sự thật càng tốt.
Lộ trình 30 ngày
Ngày 1-3
- Cài config tối giản.
- Học save/quit, motion cơ bản.
- Không dùng plugin nhiều.
Ngày 4-7
- Học operator + text object.
- Dùng buffer/window.
- Cài picker.
Tuần 2
- Cài LSP/completion.
- Dùng hover, definition, rename, references.
- Format on save.
Tuần 3
- Dùng live grep, quickfix.
- Dùng gitsigns.
- Chạy test trong terminal.
Tuần 4
- Bắt đầu tùy biến theo workflow thật.
- Xóa plugin không dùng.
- Commit dotfiles.
- Dùng Neovim cho ít nhất một task thật mỗi ngày.
Quy tắc chuyển đổi
| Quy tắc | Lý do |
|---|---|
| Một tuần đầu đừng tối ưu theme | tránh sa vào trang trí |
| Mỗi ngày học 3 motion | tăng phản xạ bền |
| Mỗi plugin phải có lý do | config không phình |
| Giữ VSCode dự phòng | giảm áp lực |
| Commit dotfiles thường xuyên | rollback dễ |
| Dùng project thật | muscle memory sinh từ việc thật |
Bài tập
- Viết danh sách 10 thao tác VSCode bạn dùng nhiều nhất.
- Map từng thao tác sang Nvim command/key.
- Trong một buổi code, chỉ dùng VSCode nếu bị block quá 5 phút.
- Sau buổi code, ghi lại 3 điểm đau và sửa config tương ứng.
- Xóa một plugin bạn cài nhưng chưa dùng trong 7 ngày.
Mẫu tracking
VSCode habit: Cmd+P
Nvim replacement: <leader>ff
Pain: finder không thấy hidden files
Fix: bật hidden trong picker config
VSCode habit: rename symbol
Nvim replacement: grn
Pain: LSP không attach
Fix: kiểm tra :checkhealth vim.lspĐiều cốt lõi
Đừng chuyển bằng niềm tin mù quáng. Chuyển bằng mapping thói quen, luyện từng lớp, và giữ fallback. Sau 30 ngày, bạn sẽ biết Neovim có hợp mình không bằng trải nghiệm thật.