jvinhit//lab

Search posts

Type to search across journal entries.

navigate open esc close

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

VSCodeNeovim
Command PaletteTelescope commands hoặc :
Quick Open<leader>ff
Search project<leader>fg
Exploreroil.nvim, mini.files, hoặc picker
Tabsbuffers
Split editorwindows
Workspace layouttab pages
Problemsdiagnostics + quickfix/location list
Source Controlgitsigns + git CLI
Integrated terminal:terminal hoặc tmux
Extensionslazy.nvim plugin specs
settings.jsonLua files
keybindings.jsonvim.keymap.set
IntelliSenseLSP + completion
Format on saveconform.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ùng gra;
  • <leader>rn: rename nếu không dùng grn.

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:

  1. mở project bằng nvim .;
  2. tìm file bằng <leader>ff;
  3. tìm text bằng <leader>fg;
  4. mở parent directory bằng - nếu dùng Oil;
  5. 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ầuVim way
sửa cùng word trong file:%s/old/new/gc
sửa symbol codeLSP rename
thêm prefix nhiều dòngvisual block <C-v>
thao tác lặp có logicmacro
đổi nhiều occurrence chọn lọcsearch + cgn + .

Ví dụ cgn:

  1. search /oldName;
  2. cgnnewName<Esc>;
  3. bấm n tới occurrence kế;
  4. 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ắcLý do
Một tuần đầu đừng tối ưu themetránh sa vào trang trí
Mỗi ngày học 3 motiontăng phản xạ bền
Mỗi plugin phải có lý doconfig không phình
Giữ VSCode dự phònggiảm áp lực
Commit dotfiles thường xuyênrollback dễ
Dùng project thậtmuscle memory sinh từ việc thật

Bài tập

  1. Viết danh sách 10 thao tác VSCode bạn dùng nhiều nhất.
  2. Map từng thao tác sang Nvim command/key.
  3. Trong một buổi code, chỉ dùng VSCode nếu bị block quá 5 phút.
  4. Sau buổi code, ghi lại 3 điểm đau và sửa config tương ứng.
  5. 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.