Chuyển tới nội dung chính

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.

cửa hàng
roadmaps
cheatsheet
tài liệu phỏng vấ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ắtMô 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ắtMô tả
b/wDi chuyển đến từ trước/sau
ge/eDi chuyển đến cuối từ trước/sau

⚡️ Di chuyển trong dòng (Lines)

Phím tắtMô 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ắtMô tả
Fe/feDi chuyển đến ký tự e trước/sau
To/toDi 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ắtMô 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ắtMô 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ắtMô tả
i/aChèn trước/sau con trỏ
I/AChèn ở đầu/cuối dòng
o/O (letter)Chèn dòng mới dưới/trên
s/SXóa ký tự/dòng và chèn
C/ccThay đổi đến cuối/dòng hiện tại
giChè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ắtMô tả
:wLưu
:qĐóng tệp
:wq|:x|ZZLưu và thoát
:wqaLư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.txtGhi vào tệp now.txt
:sav new.txtLư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ắtMô tả
rThay thế một ký tự
RNhập chế độ thay thế
u/3uHoàn tác 1 / 3 lần
UHoàn tác trên một dòng
JGộ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ắtMô tả
vNhập chế độ trực quan
VNhập chế độ trực quan theo dòng
<C-v>Nhập chế độ trực quan theo khối
ggVGChọ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ắtMô tả
xXóa ký tự (Cắt)
p/PDán sau/trước vị trí con trỏ
xpHoán đổi hai ký tự
DXóa đến cuối dòng (Cắt)
dwXóa một từ (Cắt)
ddXóa dòng (Cắt)
ddpHoán đổi hai dòng
yySao chép dòng (Copy)
"*p|"+pDán từ clipboard hệ thống
"*y|"+ySao chép vào clipboard hệ thống

Trong chế độ Trực quan (Visual Mode)

Phím tắtMô tả
d|xXóa phần đã chọn (Cắt)
sThay thế phần đã chọn
ySao chép phần đã chọn (Copy)

⚡️ Lặp lại (Repeating)

Phím tắtMô 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ắtMô tả
qiGhi lại macro i
qDừng ghi lại macro
@iChạy macro i
7@iChạ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)
dw

⚡️ Đếm (Counts)

[count] <operator> <motion>
<operator> [count] <motion>
Toán tửMô tả
2ddXóa 2 dòng
6yySao chép 6 dòng
d3wXóa 3 từ
d5jXóa 5 dòng xuống
>4kLùi vào 4 dòng lên

⚡️ Các toán tử sẵn có (Available Operators)

Toán tửMô tả
dXóa
ySao chép (copy)
cThay đổi (xóa rồi chèn)
pDán
=Định dạng mã
g~Chuyển đổi kiểu chữ
gUChuyển thành chữ in HOA
guChuyể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ợpMô tả
ddXóa dòng hiện tại
djXóa hai dòng
dwXóa đến từ tiếp theo
dbXóa đến đầu từ tiếp theo
dfaXóa đến một ký tự cụ thể
d/helloXóa đến khi gặp từ "hello"
ccThay đổi dòng hiện tại, tương đương với S
yySao chép dòng hiện tại
>jLùi vào 2 dòng
ggdGXóa toàn bộ tài liệu
gg=GLùi vào toàn bộ tài liệu
ggyGSao 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
vi/ap

⚡️ Lựa chọn (Selections)

Kết hợpMô 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 [...]
viwLựa chọn bên trong một từ
vipLựa chọn bên trong một đoạn văn bản
vipipLựa chọn nhiều đoạn văn bản

⚡️ Đối tượng Văn bản (Text Objects)

Kết hợpMô tả
pĐoạn văn bản
wTừ
WTỪ (khoảng trắng bao quanh)
sCâ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
bMột khối [(
BMột khối trong [{
tMột khối thẻ HTML

⚡️ Xóa (Delete)

Kết hợpMô tả
diwXóa bên trong một từ
disXó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)
dipXóa một đoạn văn bản

⚡️ Đa dạng (Misc)

Kết hợpMô tả
ciwThay đổi bên trong một từ
ci"Thay đổi bên trong dấu ngoặc kép
citThay đổi bên trong thẻ (HTML)
cipThay đổi bên trong một đoạn văn bản
yipSao chép bên trong một đoạn văn bản
yapSao 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ợpMô tả
:e fileChỉnh sửa một tệp trong bộ nhớ mới
:bnDi chuyển đến bộ nhớ tiếp theo
:bpDi chuyển đến bộ nhớ trước đó
:bdLoại bỏ tệp khỏi danh sách bộ nhớ
:b 5Mở bộ nhớ #5
:b fileDi chuyển đến một bộ nhớ bằng tệp
:lsLiệt kê tất cả các bộ nhớ đang mở
:sp fileMở và chia cửa sổ ngang
:vs fileMở và chia cửa sổ dọc
:hidẨn bộ nhớ hiện tại
:wnLưu tệp và chuyển đến tiếp theo
:tab baChỉnh sửa tất cả các bộ nhớ như các tab

⚡️ Cửa sổ (Windows)

Phím tắtMô tả
<C-w>sChia cửa sổ theo chiều ngang
<C-w>vChia cửa sổ theo chiều dọc
<C-w>wChuyển đến cửa sổ khác
<C-w>qThoát khỏi cửa sổ
<C-w>TChuyển sang tab mới
<C-w>xHoá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/lDi chuyển đến cửa sổ bên trái/phải
<C-w>j/kDi chuyển đến cửa sổ phía trên/dưới

⚡️ Thẻ (Tabs)

Phím tắtMô 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
:tabsLiệt kê tất cả các thẻ
:tabrDi chuyển đến thẻ đầu tiên
:tablDi chuyển đến thẻ cuối cùng
:tabm 0Di chuyển đến vị trí 0
:tabnDi chuyển đến thẻ tiếp theo
:tabpDi chuyển đến thẻ trước đó

⚡️ Chế độ Bình thường (Normal Mode)

Phím tắtMô tả
gtDi chuyển đến thẻ tiếp theo
GTDi chuyển đến thẻ trước đó
2gtDi chuyển đến thẻ số 2

5. Vim Search and Replace

⚡️ Tìm kiếm (Search)

Phím tắtMô tả
/fooTì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)
?fooTìm kiếm về phía sau
\v\d+Tìm kiếm với biểu thức chính quy
nTìm kiếm trùng với mẫu tìm kiếm hiện tại ở phía trước
NTì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]
RegEXMô tả
:s/old/newThay thế lần đầu tiên
:s/old/new/gThay thế tất cả
:s/\vold/new/gThay thế tất cả với biểu thức chính quy
:s/old/new/gcThay thế tất cả (Xác nhận)
:s/old/new/iThay thế lần đầu tiên (Không phân biệt chữ hoa/thường)
:2,6s/old/new/gThay thế giữa các dòng 2-6
:%s/{pattern}/{str}/[flags]
RegEXMô tả
:%s/old/newThay thế lần đầu tiên
:%s/old/new/gThay thế tất cả
:%s/old/new/gcThay thế tất cả (Xác nhận)
:%s/old/new/giThay thế tất cả (Không phân biệt chữ hoa/thường)
:%s/\vold/new/gThay thế tất cả với biểu thức chính quy

⚡️ Phạm vi (Ranges)

Biểu thức chính quyMô tả
%Toàn bộ tệp
’<,’>Lựa chọn hiện tại
5Dòng 5
5,10Dò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
,33 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 quyMô tả
:g/foo/dXóa các dòng chứa foo
:g!/foo/dXóa các dòng không chứa foo
:g/^\s*$/dXó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]
RegEXMô tả
:v/foo/dXóa các dòng không chứa foo (cũng như :g!/foo/d)

⚡️ Cờ (Flags)

Biểu thức chính quyMô tả
gThay thế tất cả các xuất hiện
iKhông phân biệt chữ hoa/thường
IPhân biệt chữ hoa/thường
cXác nhận mỗi sự thay thế

⚡️ Biểu thức thay thế (Substitute expression)

Biểu thức chính quyMô tả
& | \0Thay thế bằng toàn bộ phần khớp
\1...\9Thay thế bằng nhóm từ 0 đến 9
\uViết hoa chữ cái tiếp theo
\UViết hoa các ký tự tiếp theo
\lViết thường chữ cái tiếp theo
\LViết thường các ký tự tiếp theo
\eKết thúc \u, \U, \l và \L
\EKế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ắtMô tả
]cChuyển đến sự khác biệt tiếp theo
[cChuyển đến sự khác biệt trước đó

⚡️ Chỉnh sửa (Editing)

:[range]diffget [bufspec]
:[range]diffput [bufspec]
Phím tắtMô tả
do/:diffgetLấy sự khác biệt (get)
dp/:diffputĐưa sự khác biệt vào
:difQuét lại sự khác biệt
:diffoTắt chế độ so sánh
:1,$+1diffgetLấy tất cả sự khác biệt
ZQThoát mà không lưu thay đổi

⚡️ Gập (Folds)

Phím tắtMô tả
zo/zOMở
zc/zCĐóng
za/zAChuyển đổi (toggle)
zvMở các phần gập cho dòng này
zMĐóng tất cả
zRMở tất cả
zmGập thêm (foldlevel += 1)
zrGập ít đi (foldlevel -= 1)
zxCập nhật các phần gập

7. Miscellaneous

⚡️ Chữ hoa chữ thường (Case)

Phím tắtMô tả
vUViết hoa ký tự
vuViết thường ký tự
~Chuyển đổi chữ ký tự
vim UViết hoa từ
vim uViết thường từ
vim ~Chuyển đổi chữ từ
VU/gUUViết hoa dòng
Vu/guuViết thường dòng
V~/g~~Chuyển đổi chữ dòng
gggUGViết hoa toàn bộ văn bản
ggguGViết thường toàn bộ văn bản
ggg~GChuyển đổi chữ toàn bộ văn bản

⚡️ Di chuyển (Jumping)

Phím tắtMô 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ỏ
gaHiển thị giá trị hex, ascii

⚡️ Điều hướng (Navigating)

Phím tắtMô tả
%Dấu { [ ( ) ] } gần nhất/phù hợp
[( |[{ Dấu ( hoặc { trước đó
]) | ]{ Dấu ) hoặc } tiếp theo
[mBắt đầu phương thức trước đó
[MKết thúc phương thức trước đó

⚡️ Các lệnh khác (Misc command-lines)

LệnhMô tả
:hMở trình xem trợ giúp
:edit!Tải lại tệp hiện tại
:2,8m0Di chuyển dòng từ 2-8 đến 0
:nohXóa bỏ đánh dấu tìm kiếm
:sortSắp xếp dòng
:terMở một cửa sổ terminal
:set pasteBật chế độ Insert Paste
:set nopasteTắt chế độ Insert Paste
:cqThoát với lỗi (hủy bỏ Git)

⚡️ Bộ đếm (Counters)

LệnhMô tả
<C-a>Tăng số
<C-x>Giảm số

⚡️ Định dạng (Formatting)

LệnhMô tả
:ce 8Căn giữa dòng giữa 8 cột
:ri 4Căn phải dòng ở 4 cột
:leCăn trái dòng

⚡️ Thẻ (Tags)

LệnhMô tả
:tag ClassnameChuyể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 ClassnameTìm các định nghĩa của Classname
:tjump ClassnameTìm các định nghĩa của Classname (tự động chọn đầu tiên)

⚡️ Đánh dấu (Marks)

LệnhMô 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
`0Trong 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
`aNhảy đến vị trí con trỏ đã đánh dấu với a
'aNhảy đến đầu dòng của dấu a
d'aXóa từ dòng hiện tại đến dòng của dấu a
d`aXóa từ vị trí hiện tại đến vị trí của dấu a
c'aThay đổi từ dòng hiện tại đến dòng của dấu a
y`aSao chép từ vị trí hiện tại đến vị trí của dấu a
:marksLiệt kê tất cả các dấu hiệu hiện tại
:delm aXóa dấu a
:delm a-dXóa dấu a, b, c, d
:delm abc Xóa dấu a, b, c

⚡️ Tính toán (Calculator)

LệnhMô tả
<C-r>= 7*7Hiển thị kết quả
<C-r>= 10/2Hiển thị kết quả

⚡️ Shell

LệnhMô tả
:!<shell>Thực hiện lệnh Shell
:r!<shell>Đọc kết quả của lệnh shell
:r!dateChèn ngày hiện tại
:!!dateThay thế dòng hiện tại bằng ngày

⚡️ Command line

LệnhMô 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

II. Tài liệu tham khảo

Chia sẻ: