Vim không chỉ là trình soạn thảo — mà là một môi trường tương tác dựa trên ngôn ngữ lệnh, nơi mỗi thao tác đều có thể được kết hợp, lặp lại và mở rộng. Khác với các trình soạn thảo đồ họa, Vim phân chia rõ ràng các vai trò của phím bấm theo chế độ làm việc.
Các chế độ cốt lõi
- Chế độ bình thường (Normal mode): Dùng để di chuyển, chọn khối và thực thi lệnh — đây là chế độ mặc định khi khởi động.
- Chế độ chèn (Insert mode): Nhấn
i,a,ohoặcOđể bắt đầu nhập văn bản. - Chế độ chọn (Visual mode): Gồm ba dạng — ký tự (
v), dòng (V) và khối (<C-v>), cho phép đánh dấu vùng trước khi áp dụng hành động. - Chế độ thay thế (Replace mode): Kích hoạt bằng
R, ghi đè từng ký tự từ vị trí con trỏ. - Chế độ lệnh (Command-line mode): Mở bằng
:, dùng để lưu, đóng, tìm kiếm hoặc gọi hàm hệ thống.
Mỗi phím có ý nghĩa khác nhau tùy vào chế độ hiện tại. Ví dụ: x xóa ký tự ở chế độ bình thường, nhưng lại nhập chữ "x" ở chế độ chèn. Phím Esc luôn đưa bạn trở về chế độ bình thường — thao tác nền tảng nhất để kiểm soát luồng làm việc.
Hệ thống điều hướng như ngôn ngữ lập trình
Vim mô hình hóa thao tác như một cấu trúc động từ + danh từ + bổ ngữ:
- Danh từ xác định phạm vi tác động:
w(từ),$(cuối dòng),ip(nội dung đoạn),at(cả thẻ HTML),/pattern(kết quả tìm kiếm). - Động từ định nghĩa hành động:
d(xóa),c(thay đổi),y(sao chép),>(thụt lề phải). - Bổ ngữ điều chỉnh phạm vi:
i(inner) — chỉ nội dung bên trong,a(around) — bao gồm cả ký hiệu bao quanh (ví dụ:ci"xóa nội dung trong ngoặc kép,da"xóa cả cặp ngoặc).
Một số tổ hợp phổ biến:
3dw # Xóa 3 từ tiếp theo<br>ci{ # Thay nội dung trong ngoặc nhọn<br>dat # Xóa toàn bộ thẻ HTML<br>v2j$y # Chọn từ dòng hiện tại xuống 2 dòng rồi sao chép<br><C-v>2j3lI* <Esc> # Chọn khối chữ nhật, chèn dấu * vào đầu mỗi dòng
Quản lý nội dung đa lớp
Vim tổ chức dữ liệu theo ba cấp độ phân cấp:
- Buffer: Đại diện cho một file đã tải vào bộ nhớ — có thể mở nhiều buffer cùng lúc, dù chưa hiển thị.
- Window: Giao diện trực quan — một buffer có thể xuất hiện đồng thời trong nhiều cửa sổ (dùng
:sphoặc:vspđể chia màn hình). - Tabpage: Tập hợp các cửa sổ — hữu ích khi làm việc với nhiều dự án riêng biệt.
Các lệnh quản lý buffer:
:ls # Liệt kê tất cả buffer đang mở<br>:bnext # Chuyển sang buffer kế tiếp<br>:bdelete # Đóng buffer hiện tại<br>:e! # Tải lại file từ đĩa (bỏ thay đổi chưa lưu)
Tự động hóa bằng macro và plugin
Ghi lại chuỗi thao tác bằng macro giúp tiết kiệm thời gian khi lặp lại công việc thủ công:
qa # Bắt đầu ghi vào register 'a'<br>... # Thực hiện các bước cần lặp<br>q # Dừng ghi<br>@a # Phát lại macro<br>5@a # Phát lại 5 lần
Với Vim 8+, hệ thống plugin tích hợp cho phép quản lý tiện ích mà không cần công cụ bên ngoài:
mkdir -p ~/.vim/pack/myplugins/start<br>cd ~/.vim/pack/myplugins/start<br>git clone https://github.com/preservim/nerdtree.git
Một số plugin thiết yếu:
NERDTree: Trình duyệt cây thư mục tích hợp.fzf.vim: Tìm kiếm nhanh file, hàm, lịch sử lệnh.vim-sleuth: Tự phát hiện và áp dụng tab-width / indent-style theo dự án.vim-commentary: Gắn/tách chú thích theo cú pháp ngôn ngữ.
Mở rộng Vim ra ngoài trình soạn thảo
Nhiều công cụ dòng lệnh hỗ trợ chế độ Vim thông qua thư viện readline:
# ~/.inputrc<br>set editing-mode vi<br>set keymap vi
Sau đó, các ứng dụng như python, mysql, gh sẽ hiểu các phím hjkl, Esc, ciw… Ngoài ra, môi trường shell cũng có thể kích hoạt:
# Bash<br>set -o vi<br># Zsh<br>bindkey -v<br># Fish<br>fish_vi_key_bindings
Biến môi trường EDITOR=vim đảm bảo Git, crontab hay các công cụ khác sử dụng Vim làm trình soạn thảo mặc định.
Tùy chỉnh sâu qua vimrc
Tập tin cấu hình ~/.vimrc là nơi định nghĩa hành vi toàn cục. Một cấu hình tối giản nhưng hiệu quả:
" Kích hoạt syntax highlighting và số dòng<br>syntax on<br>set number relativenumber<br>set mouse=a<br>set clipboard=unnamedplus<br><br>" Thiết lập hành vi thụt lề cho mã nguồn<br>set autoindent<br>set shiftwidth=4<br>set softtabstop=4<br>set expandtab<br><br>" Tìm kiếm linh hoạt<br>set incsearch<br>set ignorecase<br>set smartcase
Khuyến khích khám phá cấu hình từ cộng đồng (như amix/vimrc), nhưng nên đọc kỹ và chỉ tích hợp phần phù hợp — tránh sao chép nguyên bản gây khó bảo trì.