Vim - Cheatsheet
Tổng hợp Vim Cheatsheet - Tham khảo về Vim 8.2 để giúp bạn học trình soạn thảo vim nhanh hơn.
🔖 Gợi ý từ Admin
📝 Tài liệu phỏng vấn kiến thức lập trình: Xem tại đây!!!
📌 Tìm hiểu về thuật toán: Xem tại đây!!!
📌 Roadmaps - Lộ trình trở thành một lập trình viên: Xem tại đây!!!
⚡️ Cheatsheet các ngôn ngữ lập trình: Xem tại đây!!!
⚡️ Handbook lập trình: Xem tại đây!!!
I. Tổng hợp Cheatsheet Vim
1. Cơ bản
Các phím tắt được liệt kê dưới đây giúp di chuyển và cuộn trong môi trường văn bản (chẳng hạn như trong trình soạn thảo Vim hoặc trong trình duyệt).
⚡️ Chuyển động (Motions)
Phím tắt | Mô tả |
---|---|
h|j|k|l| | Di chuyển bằng các phím mũi tên |
<C-u>/<C-d> | Lăn nửa trang lên/xuống |
<C-b>/<C-f> | Lăn trang lên/xuống |
⚡️ Di chuyển giữa các từ (Words)
Phím tắt | Mô tả |
---|---|
b/w | Di chuyển đến từ trước/sau |
ge/e | Di chuyển đến cuối từ trước/sau |
⚡️ Di chuyển trong dòng (Lines)
Phím tắt | Mô tả |
---|---|
0(zero) /$ | Bắt đầu/Kết thúc dòng |
^ | Bắt đầu dòng (không phải dòng trắng) |
⚡️ Di chuyển trong ký tự (Characters)
Phím tắt | Mô tả |
---|---|
Fe/fe | Di chuyển đến ký tự e trước/sau |
To/to | Di chuyển trước/sau ký tự o |
|/n| | Đi đến cột đầu tiên/cột thứ n |
⚡️ Di chuyển trong tài liệu (Document)
Phím tắt | Mô tả |
---|---|
gg/G | Đầu/Cuối của tài liệu |
:n/:nG | Đi đến dòng số n |
}/{ | Dòng trống kế tiếp/trước |
⚡️ Cửa sổ (Window)
Phím tắt | Mô tả |
---|---|
H/M/L | Đầu/Chính giữa/Cuối màn hình |
zt/zz/zb | Đầu/Chính giữa/Cuối dòng này |
⚡️ Chế độ Chèn (Insert Mode)
Phím tắt | Mô tả |
---|---|
i/a | Chèn trước/sau con trỏ |
I/A | Chèn ở đầu/cuối dòng |
o/O (letter) | Chèn dòng mới dưới/trên |
s/S | Xóa ký tự/dòng và chèn |
C/cc | Thay đổi đến cuối/dòng hiện tại |
gi | Chèn tại điểm chèn cuối cùng |
Esc|<C-[> | Thoát khỏi chế độ chèn |
⚡️ Lưu và Thoát (Saving and Exiting)
Phím tắt | Mô tả |
---|---|
:w | Lưu |
:q | Đóng tệp |
:wq|:x|ZZ | Lưu và thoát |
:wqa | Lưu và thoát tất cả tệp |
:q!|ZQ | Đóng bắt buộc |
:qa | Đóng tất cả tệp |
:qa! | Đóng bắt buộc tất cả tệp |
:w now.txt | Ghi vào tệp now.txt |
:sav new.txt | Lưu và chỉnh sửa new.txt |
:w !sudo tee % | Ghi vào tệp chỉ đọc |
⚡️ Chế độ Bình thường (Normal Mode)
Phím tắt | Mô tả |
---|---|
r | Thay thế một ký tự |
R | Nhập chế độ thay thế |
u/3u | Hoàn tác 1 / 3 lần |
U | Hoàn tác trên một dòng |
J | Gộp với dòng tiếp theo |
<C-r>/5 <C-r> | Làm lại 1 / 5 lần |
⚡️ Chế độ Trực quan (Visual Mode)
Phím tắt | Mô tả |
---|---|
v | Nhập chế độ trực quan |
V | Nhập chế độ trực quan theo dòng |
<C-v> | Nhập chế độ trực quan theo khối |
ggVG | Chọn toàn bộ văn bản |
>/< | Dịch chuyển văn bản sang phải/trái |
⚡️ Cắt và Dán (Cut and Paste)
Phím tắt | Mô tả |
---|---|
x | Xóa ký tự (Cắt) |
p/P | Dán sau/trước vị trí con trỏ |
xp | Hoán đổi hai ký tự |
D | Xóa đến cuối dòng (Cắt) |
dw | Xóa một từ (Cắt) |
dd | Xóa dòng (Cắt) |
ddp | Hoán đổi hai dòng |
yy | Sao chép dòng (Copy) |
"*p|"+p | Dán từ clipboard hệ thống |
"*y|"+y | Sao chép vào clipboard hệ thống |
Trong chế độ Trực quan (Visual Mode)
Phím tắt | Mô tả |
---|---|
d|x | Xóa phần đã chọn (Cắt) |
s | Thay thế phần đã chọn |
y | Sao chép phần đã chọn (Copy) |
⚡️ Lặp lại (Repeating)
Phím tắt | Mô tả |
---|---|
. | Lặp lại lệnh cuối cùng |
; | Lặp lại lệnh f, t, F hoặc T cuối cùng |
, | Lặp lại lệnh f, t, F hoặc T ngược lại |
& | Lặp lại lệnh :s cuối cùng |
@: | Lặp lại một lệnh dòng lệnh |
⚡️ Macros: Bạn có thể lưu macro cho bất kỳ chữ cái nào, không chỉ là "i".
Phím tắt | Mô tả |
---|---|
qi | Ghi lại macro i |
q | Dừng ghi lại macro |
@i | Chạy macro i |
7@i | Chạy macro i 7 lần |
@@ | Lặp lại macro cuối cùng |
2. Vim Operators
⚡️ Cách sử dụng (Usage): Kết hợp các toán tử với các di chuyển để sử dụng chúng.
Toán tử | Di chuyển (motion) |
---|---|
d | w |
⚡️ Đếm (Counts)
[count] <operator> <motion>
<operator> [count] <motion>
Toán tử | Mô tả |
---|---|
2dd | Xóa 2 dòng |
6yy | Sao chép 6 dòng |
d3w | Xóa 3 từ |
d5j | Xóa 5 dòng xuống |
>4k | Lùi vào 4 dòng lên |
⚡️ Các toán tử sẵn có (Available Operators)
Toán tử | Mô tả |
---|---|
d | Xóa |
y | Sao chép (copy) |
c | Thay đổi (xóa rồi chèn) |
p | Dán |
= | Định dạng mã |
g~ | Chuyển đổi kiểu chữ |
gU | Chuyển thành chữ in HOA |
gu | Chuyển thành chữ in thường |
> | Lùi vào bên phải |
< | Lùi vào bên trái |
! | Lọc qua chương trình ngoại vi |
⚡️ Ví dụ (Examples)
Kết hợp | Mô tả |
---|---|
dd | Xóa dòng hiện tại |
dj | Xóa hai dòng |
dw | Xóa đến từ tiếp theo |
db | Xóa đến đầu từ tiếp theo |
dfa | Xóa đến một ký tự cụ thể |
d/hello | Xóa đến khi gặp từ "hello" |
cc | Thay đổi dòng hiện tại, tương đương với S |
yy | Sao chép dòng hiện tại |
>j | Lùi vào 2 dòng |
ggdG | Xóa toàn bộ tài liệu |
gg=G | Lùi vào toàn bộ tài liệu |
ggyG | Sao chép toàn bộ tài liệu |
3. Vim Text objects
⚡️ Cách sử dụng (Usage): Kết hợp các toán tử với các chuyển động để sử dụng chúng.
Toán tử | Bên trong/xung quanh | Đối tượng văn bản |
---|---|---|
v | i/a | p |
⚡️ Lựa chọn (Selections)
Kết hợp | Mô tả |
---|---|
vi" | Lựa chọn bên trong dấu ngoặc kép "..." |
va" | Lựa chọn dấu ngoặc kép "..." |
vi[ | Lựa chọn bên trong dấu ngoặc vuông [...] |
va[ | Lựa chọn dấu ngoặc vuông [...] |
viw | Lựa chọn bên trong một từ |
vip | Lựa chọn bên trong một đoạn văn bản |
vipip | Lựa chọn nhiều đoạn văn bản |
⚡️ Đối tượng Văn bản (Text Objects)
Kết hợp | Mô tả |
---|---|
p | Đoạn văn bản |
w | Từ |
W | TỪ (khoảng trắng bao quanh) |
s | Câu |
[ ( { < | Một khối [ ], (), hoặc |
] ) } > | Một khối [ ], (), hoặc |
' " ` | Một chuỗi được đặt trong dấu ngoặc đơn, ngoặc kép, hoặc dấu nháy ngược |
b | Một khối [( |
B | Một khối trong [{ |
t | Một khối thẻ HTML |
⚡️ Xóa (Delete)
Kết hợp | Mô tả |
---|---|
diw | Xóa bên trong một từ |
dis | Xóa bên trong một câu |
di" | Xóa bên trong dấu ngoặc kép |
da" | Xóa bên trong dấu ngoặc kép (bao gồm cả dấu ngoặc kép) |
dip | Xóa một đoạn văn bản |
⚡️ Đa dạng (Misc)
Kết hợp | Mô tả |
---|---|
ciw | Thay đổi bên trong một từ |
ci" | Thay đổi bên trong dấu ngoặc kép |
cit | Thay đổi bên trong thẻ (HTML) |
cip | Thay đổi bên trong một đoạn văn bản |
yip | Sao chép bên trong một đoạn văn bản |
yap | Sao chép một đoạn văn bản (bao gồm cả dòng mới) |
4. Vim Multiple files
⚡️ Bộ nhớ đệm (Buffers)
Kết hợp | Mô tả |
---|---|
:e file | Chỉnh sửa một tệp trong bộ nhớ mới |
:bn | Di chuyển đến bộ nhớ tiếp theo |
:bp | Di chuyển đến bộ nhớ trước đó |
:bd | Loại bỏ tệp khỏi danh sách bộ nhớ |
:b 5 | Mở bộ nhớ #5 |
:b file | Di chuyển đến một bộ nhớ bằng tệp |
:ls | Liệt kê tất cả các bộ nhớ đang mở |
:sp file | Mở và chia cửa sổ ngang |
:vs file | Mở và chia cửa sổ dọc |
:hid | Ẩn bộ nhớ hiện tại |
:wn | Lưu tệp và chuyển đến tiếp theo |
:tab ba | Chỉnh sửa tất cả các bộ nhớ như các tab |
⚡️ Cửa sổ (Windows)
Phím tắt | Mô tả |
---|---|
<C-w>s | Chia cửa sổ theo chiều ngang |
<C-w>v | Chia cửa sổ theo chiều dọc |
<C-w>w | Chuyển đến cửa sổ khác |
<C-w>q | Thoát khỏi cửa sổ |
<C-w>T | Chuyển sang tab mới |
<C-w>x | Hoán đổi cửa sổ hiện tại với cửa sổ kế tiếp |
<C-w>-/+ | Giảm/Tăng chiều cao |
<C-w></> | Giảm/Tăng chiều rộng |
<C-w>| | Tối đa hóa chiều rộng |
<C-w>= | Chiều cao và rộng bằng nhau |
<C-w>h/l | Di chuyển đến cửa sổ bên trái/phải |
<C-w>j/k | Di chuyển đến cửa sổ phía trên/dưới |
⚡️ Thẻ (Tabs)
Phím tắt | Mô tả |
---|---|
:tabe [file] | Chỉnh sửa tệp trong thẻ mới |
:tabf [file] | Mở nếu tồn tại trong thẻ mới |
:tabc | Đóng thẻ hiện tại |
:tabo | Đóng các thẻ khác |
:tabs | Liệt kê tất cả các thẻ |
:tabr | Di chuyển đến thẻ đầu tiên |
:tabl | Di chuyển đến thẻ cuối cùng |
:tabm 0 | Di chuyển đến vị trí 0 |
:tabn | Di chuyển đến thẻ tiếp theo |
:tabp | Di chuyển đến thẻ trước đó |
⚡️ Chế độ Bình thường (Normal Mode)
Phím tắt | Mô tả |
---|---|
gt | Di chuyển đến thẻ tiếp theo |
GT | Di chuyển đến thẻ trước đó |
2gt | Di chuyển đến thẻ số 2 |
5. Vim Search and Replace
⚡️ Tìm kiếm (Search)
Phím tắt | Mô tả |
---|---|
/foo | Tìm kiếm về phía trước |
/foo\c | Tìm kiếm về phía trước (không phân biệt chữ hoa/thường) |
?foo | Tìm kiếm về phía sau |
\v\d+ | Tìm kiếm với biểu thức chính quy |
n | Tìm kiếm trùng với mẫu tìm kiếm hiện tại ở phía trước |
N | Tìm kiếm trùng với mẫu tìm kiếm hiện tại ở phía sau |
* | Tìm kiếm từ hiện tại về phía trước |
# | Tìm kiếm từ hiện tại về phía sau |
⚡️ Thay thế dòng (Replace LINE)
:[range]s/{pattern}/{str}/[flags]
RegEX | Mô tả |
---|---|
:s/old/new | Thay thế lần đầu tiên |
:s/old/new/g | Thay thế tất cả |
:s/\vold/new/g | Thay thế tất cả với biểu thức chính quy |
:s/old/new/gc | Thay thế tất cả (Xác nhận) |
:s/old/new/i | Thay thế lần đầu tiên (Không phân biệt chữ hoa/thường) |
:2,6s/old/new/g | Thay thế giữa các dòng 2-6 |
:%s/{pattern}/{str}/[flags]
RegEX | Mô tả |
---|---|
:%s/old/new | Thay thế lần đầu tiên |
:%s/old/new/g | Thay thế tất cả |
:%s/old/new/gc | Thay thế tất cả (Xác nhận) |
:%s/old/new/gi | Thay thế tất cả (Không phân biệt chữ hoa/thường) |
:%s/\vold/new/g | Thay thế tất cả với biểu thức chính quy |
⚡️ Phạm vi (Ranges)
Biểu thức chính quy | Mô tả |
---|---|
% | Toàn bộ tệp |
’<,’> | Lựa chọn hiện tại |
5 | Dòng 5 |
5,10 | Dòng từ 5 đến 10 |
$ | Dòng cuối cùng |
2,$ | Dòng từ 2 đến cuối |
. | Dòng hiện tại |
,3 | 3 dòng tiếp theo |
-3, | 3 dòng phía trước |
⚡️ Lệnh toàn cục (Global command)
:[range]g/{pattern}/[command]
Biểu thức chính quy | Mô tả |
---|---|
:g/foo/d | Xóa các dòng chứa foo |
:g!/foo/d | Xóa các dòng không chứa foo |
:g/^\s*$/d | Xóa tất cả các dòng trống |
:g/foo/t$ | Sao chép các dòng chứa foo đến cuối tệp |
:g/foo/m$ | Di chuyển các dòng chứa foo đến cuối tệp |
:g/^/m0 | Đảo ngược tệp |
:g/^/t. | Sao chép mỗi dòng |
⚡️ Nghịch đảo (Inverse :g)
:[range]v/{pattern}/[command]
RegEX | Mô tả |
---|---|
:v/foo/d | Xóa các dòng không chứa foo (cũng như :g!/foo/d) |
⚡️ Cờ (Flags)
Biểu thức chính quy | Mô tả |
---|---|
g | Thay thế tất cả các xuất hiện |
i | Không phân biệt chữ hoa/thường |
I | Phân biệt chữ hoa/thường |
c | Xác nhận mỗi sự thay thế |
⚡️ Biểu thức thay thế (Substitute expression)
Biểu thức chính quy | Mô tả |
---|---|
& | \0 | Thay thế bằng toàn bộ phần khớp |
\1...\9 | Thay thế bằng nhóm từ 0 đến 9 |
\u | Viết hoa chữ cái tiếp theo |
\U | Viết hoa các ký tự tiếp theo |
\l | Viết thường chữ cái tiếp theo |
\L | Viết thường các ký tự tiếp theo |
\e | Kết thúc \u, \U, \l và \L |
\E | Kết thúc \u, \U, \l và \L |
⚡️ Ví dụ
:s/a\|b/xxx\0xxx/g # Sửa đổi "a b" thành "xxxaxxx xxxbxxx"
:s/test/\U& file/ # Sửa đổi "test" thành "TEST FILE"
:s/\(test\)/\U\1\e file/ # Sửa đổi "test" thành "TEST file"
:s/\v([abc])([efg])/\2\1/g # Sửa đổi "af fa bg" thành "fa fa gb"
:s/\v\w+/\u\0/g # Sửa đổi "bla bla" thành "Bla Bla"
:s/\v([ab])|([cd])/\1x/g # Sửa đổi "a b c d" thành "ax bx x x"
:%s/.*/\L&/ # Sửa đổi "HTML" thành "html"
:s/\v<(.)(\w*)/\u\1\L\2/g # Làm cho mỗi chữ cái đầu tiên của từ trở lên
:%s/^\(.*\)\n\1/\1/ # Loại bỏ các dòng trùng lặp
:%s/<\/\=\(\w\+\)\>/\U&/g # Chuyển đổi các thẻ HTML thành chữ hoa
:g/^pattern/s/$/mytext # Tìm và thêm văn bản vào cuối
:g/pattern/norm! @i # Chạy một macro trên các dòng trùng khớp
/^\(.*\)\(\r\?\n\1\)\+$ # Xem các dòng trùng lặp
/\v^(.*)(\r?\n\1)+$ # Xem các dòng trùng lặp (rất phép màu)
:v/./,/./-j # Nén các dòng trắng thành một dòng trắng
:g/<p1>/,/<p2>/d # Xóa từ <p1> đến <p2>
6. Vimdiff
⚡️ Cách sử dụng (Usage)
$ vimdiff file1 file2 [file3]
$ vim -d file1 file2 [file3]
⚡️ Di chuyển (Jumping)
Phím tắt | Mô tả |
---|---|
]c | Chuyển đến sự khác biệt tiếp theo |
[c | Chuyển đến sự khác biệt trước đó |
⚡️ Chỉnh sửa (Editing)
:[range]diffget [bufspec]
:[range]diffput [bufspec]
Phím tắt | Mô tả |
---|---|
do/:diffget | Lấy sự khác biệt (get) |
dp/:diffput | Đưa sự khác biệt vào |
:dif | Quét lại sự khác biệt |
:diffo | Tắt chế độ so sánh |
:1,$+1diffget | Lấy tất cả sự khác biệt |
ZQ | Thoát mà không lưu thay đổi |
⚡️ Gập (Folds)
Phím tắt | Mô tả |
---|---|
zo/zO | Mở |
zc/zC | Đóng |
za/zA | Chuyển đổi (toggle) |
zv | Mở các phần gập cho dòng này |
zM | Đóng tất cả |
zR | Mở tất cả |
zm | Gập thêm (foldlevel += 1) |
zr | Gập ít đi (foldlevel -= 1) |
zx | Cập nhật các phần gập |
7. Miscellaneous
⚡️ Chữ hoa chữ thường (Case)
Phím tắt | Mô tả |
---|---|
vU | Viết hoa ký tự |
vu | Viết thường ký tự |
~ | Chuyển đổi chữ ký tự |
vim U | Viết hoa từ |
vim u | Viết thường từ |
vim ~ | Chuyển đổi chữ từ |
VU/gUU | Viết hoa dòng |
Vu/guu | Viết thường dòng |
V~/g~~ | Chuyển đổi chữ dòng |
gggUG | Viết hoa toàn bộ văn bản |
ggguG | Viết thường toàn bộ văn bản |
ggg~G | Chuyển đổi chữ toàn bộ văn bản |
⚡️ Di chuyển (Jumping)
Phím tắt | Mô tả |
---|---|
<C-o> | Quay lại bước trước |
<C-i> | Đi tới bước tiếp theo |
gf | Đi tới file tại con trỏ |
ga | Hiển thị giá trị hex, ascii |
⚡️ Điều hướng (Navigating)
Phím tắt | Mô tả |
---|---|
% | Dấu { [ ( ) ] } gần nhất/phù hợp |
[( |[{ | Dấu ( hoặc { trước đó |
]) | ]{ | Dấu ) hoặc } tiếp theo |
[m | Bắt đầu phương thức trước đó |
[M | Kết thúc phương thức trước đó |
⚡️ Các lệnh khác (Misc command-lines)
Lệnh | Mô tả |
---|---|
:h | Mở trình xem trợ giúp |
:edit! | Tải lại tệp hiện tại |
:2,8m0 | Di chuyển dòng từ 2-8 đến 0 |
:noh | Xóa bỏ đánh dấu tìm kiếm |
:sort | Sắp xếp dòng |
:ter | Mở một cửa sổ terminal |
:set paste | Bật chế độ Insert Paste |
:set nopaste | Tắt chế độ Insert Paste |
:cq | Thoát với lỗi (hủy bỏ Git) |
⚡️ Bộ đếm (Counters)
Lệnh | Mô tả |
---|---|
<C-a> | Tăng số |
<C-x> | Giảm số |
⚡️ Định dạng (Formatting)
Lệnh | Mô tả |
---|---|
:ce 8 | Căn giữa dòng giữa 8 cột |
:ri 4 | Căn phải dòng ở 4 cột |
:le | Căn trái dòng |
⚡️ Thẻ (Tags)
Lệnh | Mô tả |
---|---|
:tag Classname | Chuyển đến định nghĩa đầu tiên của Classname |
<C-]> | Chuyển đến định nghĩa |
g] | Xem tất cả các định nghĩa |
<C-t> | Quay lại thẻ trước |
<C-o> <C-i> | Quay lại/phía trước |
:tselect Classname | Tìm các định nghĩa của Classname |
:tjump Classname | Tìm các định nghĩa của Classname (tự động chọn đầu tiên) |
⚡️ Đánh dấu (Marks)
Lệnh | Mô tả |
---|---|
`^ | Vị trí cuối cùng của con trỏ trong chế độ chèn |
`. | Thay đổi cuối cùng trong bộ đệm hiện tại |
`" | Cuối cùng thoát khỏi bộ đệm hiện tại |
`0 | Trong tập tin được chỉnh sửa cuối cùng |
'' | Quay lại dòng trong bộ đệm hiện tại mà bạn nhảy từ |
`` | Quay lại vị trí trong bộ đệm hiện tại mà bạn nhảy từ |
`[ | Đến đầu của văn bản được thay đổi hoặc sao chép trước đó |
`] | Đến cuối của văn bản được thay đổi hoặc sao chép trước đó |
`< | Đến đầu của lựa chọn trực quan trước đó |
`> | Đến cuối của lựa chọn trực quan trước đó |
ma | Đặt dấu hiệu cho vị trí con trỏ hiện tại với a |
`a | Nhảy đến vị trí con trỏ đã đánh dấu với a |
'a | Nhảy đến đầu dòng của dấu a |
d'a | Xóa từ dòng hiện tại đến dòng của dấu a |
d`a | Xóa từ vị trí hiện tại đến vị trí của dấu a |
c'a | Thay đổi từ dòng hiện tại đến dòng của dấu a |
y`a | Sao chép từ vị trí hiện tại đến vị trí của dấu a |
:marks | Liệt kê tất cả các dấu hiệu hiện tại |
:delm a | Xóa dấu a |
:delm a-d | Xóa dấu a, b, c, d |
:delm abc | Xóa dấu a, b, c |
⚡️ Tính toán (Calculator)
Lệnh | Mô tả |
---|---|
<C-r>= 7*7 | Hiển thị kết quả |
<C-r>= 10/2 | Hiển thị kết quả |
⚡️ Shell
Lệnh | Mô tả |
---|---|
:!<shell> | Thực hiện lệnh Shell |
:r!<shell> | Đọc kết quả của lệnh shell |
:r!date | Chèn ngày hiện tại |
:!!date | Thay thế dòng hiện tại bằng ngày |
⚡️ Command line
Lệnh | Mô tả |
---|---|
<C-r><C-w> | Chèn từ hiện tại vào dòng lệnh |
<C-r>" | Dán từ bộ nhớ " vào dòng lệnh |
<C-x><C-f> | Tự động hoàn thành đường dẫn trong chế độ chèn |
⚡️ Mẹo (Tricks)
Xóa các dòng trùng lặp
:sort | %!uniq -u
Để đánh số các dòng trong tệp
:%!cat -n
Sao chép toàn bộ tài liệu vào clipboard
:%w !pbcopy # Mac OS X
:%w !xclip -i -sel c # GNU/Linux
:%w !xsel -i -b # GNU/Linux