Vim/Neovim — Soạn Thảo Văn Bản Tốc Độ Ánh Sáng
Làm quen với Vim/Neovim: modal editing, navigation, configuration và biến editor thành IDE.
Vim không dễ — nhưng một khi đã quen, bạn sẽ không muốn quay lại. Modal editing giúp thao tác với văn bản nhanh hơn chuột rất nhiều.
Modal Editing — Chìa Khóa Của Vim#
Các chế độ (mode):
Normal → Insert → Visual → Command
↓ ↓ ↓ ↓
Điều Gõ chữ Chọn text Lệnh
hướngplaintextThoát Insert: Esc hoặc Ctrl+[
Navigation — Di Chuyển Không Cần Chuột#
↑
k
← h l → ← b/w (word)
j e (end of word)
↓ 0/$ (đầu/cuối dòng)
^ (ký tự đầu dòng)text| Phím | Hành động |
|---|---|
h/j/k/l | Trái/xuống/lên/phải |
w/b | Word tiếp/trước |
e | Cuối word |
0 / ^ / $ | Đầu dòng / ký tự đầu / cuối dòng |
gg / G | Đầu file / cuối file |
:{number} | Nhảy đến dòng số |
Ctrl+d/u | Nửa trang xuống/lên |
Ctrl+f/b | Trang xuống/lên |
% | Nhảy đến ngoặc tương ứng |
* / # | Tìm từ hiện tại tiếp theo/trước |
Editing — Thao Tác Văn Bản#
Cú Pháp: [count]operator[motion]#
d2w → delete 2 words
ci( → change inside parentheses
y3j → yank 3 dòng xuốngplaintextOperators#
| Phím | Hành động |
|---|---|
d | Delete (cắt) |
y | Yank (copy) |
c | Change (xóa + vào Insert) |
p / P | Paste sau/trước |
x | Xóa ký tự |
r | Replace 1 ký tự |
. | Lặp lại hành động cuối |
Visual Mode#
v → Visual (ký tự)
V → Visual line
Ctrl+v → Visual blockplaintextChọn xong: d (xóa), y (copy), > (indent), ~ (đổi case).
Command Mode#
:w " Save
:q " Quit
:wq " Save & quit
:q! " Force quit
:e file " Mở file
:bd " Close buffer
:sp " Split ngang
:vsp " Split dọc
:!command " Chạy shell command
:%s/old/new/g " Replace toàn filevimBuffers, Windows, Tabs#
Buffer → File trong bộ nhớ
Window → Cửa sổ xem buffer
Tab → Collection của windowstext:ls " Danh sách buffer
:b 3 " Đến buffer số 3
:bn / :bp " Buffer tiếp/trước
Ctrl+w v " Vertical split
Ctrl+w s " Horizontal split
Ctrl+w w " Chuyển window
Ctrl+w q " Đóng window
:tabnew file " Tab mới
gt / gT " Tab tiếp/trướcvimNeovim — Vim Hiện Đại#
Neovim là fork của Vim với nhiều cải tiến:
- LSP built-in — autocomplete, go-to-definition
- Lua thay Vimscript — cấu hình mạnh hơn, dễ hơn
- Treesitter — syntax highlight chính xác
- Built-in terminal —
:term
Config Cơ Bản (init.lua)#
-- Options
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.mouse = 'a'
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.splitright = true
vim.opt.splitbelow = true
-- Keymaps
vim.keymap.set('n', '<leader>w', ':w<CR>')
vim.keymap.set('n', '<leader>q', ':q<CR>')
vim.keymap.set('n', '<leader>e', ':NvimTreeToggle<CR>')
vim.keymap.set('n', '<leader>ff', ':Telescope find_files<CR>')luaPlugins Thiết Yếu#
-- lazy.nvim — plugin manager
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
vim.opt.rtp:prepend(lazypath)
require('lazy').setup({
-- Navigation
'nvim-telescope/telescope.nvim', -- Fuzzy finder
'nvim-tree/nvim-tree.lua', -- File explorer
-- LSP
'neovim/nvim-lspconfig', -- LSP client
'hrsh7th/nvim-cmp', -- Autocomplete
-- Editor
'nvim-treesitter/nvim-treesitter', -- Syntax highlight
'windwp/nvim-autopairs', -- Auto close brackets
'numToStr/Comment.nvim', -- Comment toggling
-- Git
'lewis6991/gitsigns.nvim', -- Git signs in gutter
-- Theme
'catppuccin/nvim', -- Theme
})luaPlugin Tương Đương IDE#
| IDE Feature | Neovim Plugin |
|---|---|
| File explorer | nvim-tree |
| Fuzzy find | Telescope |
| Autocomplete | nvim-cmp + LSP |
| Git blame | gitsigns |
| Terminal | Built-in |
| Debugger | nvim-dap |
| Test runner | neotest |
| Snippets | LuaSnip |
Vim Trong IDE#
Hầu hết IDE đều có Vim mode:
- VS Code: Vim extension
- JetBrains: IdeaVim plugin
- VSCode Neovim: Dùng Neovim thật trong VS Code
Mẹo Hay#
" Sửa lỗi nhanh
ciw " Xóa word hiện tại, vào insert
ci" " Xóa trong ngoặc kép
cap " Xóa trong tag HTML (change around pair)
dd " Xóa dòng
D " Xóa từ cursor đến cuối dòng
C " Xóa từ cursor đến cuối dòng + insert
" Macro — ghi và lặp
qa " Ghi macro vào register a
... " Thao tác
q " Dừng ghi
@a " Chạy macro a
@@ " Lặp lại macro cuốivimKết Luận#
Vim khó tuần đầu — nhưng đầu tư 2 tuần để học, bạn tiết kiệm hàng trăm giờ về sau. Bắt đầu với vimtutor (gõ trong terminal). Sau đó dùng Neovim với config tối thiểu, thêm plugin khi cần. Đừng copy config ai đó — tự build dần dần.