Câu 1Để gõ được văn bản trong vi, bạn nhấn gì ở normal mode?
Cơ bản về trình soạn thảo văn bản vi
Học cách khởi động vi, chuyển giữa normal mode và insert mode, quay lại bằng Esc, và lưu bằng :wq hoặc bỏ bằng :q! — thực hành ngay trên terminal trong trình duyệt.
Khởi động vi và các chế độ của nó
vi là một trình soạn thảo văn bản có trên hầu hết mọi server Linux.
Trong khóa học này bạn sẽ học những thao tác vi tối thiểu hoạt động trên mọi server.
vi có hai chế độ.
Ngay sau khi khởi động bạn ở normal mode, nơi các phím đóng vai trò di chuyển hoặc lệnh và bạn không gõ được văn bản.
Nhấn i chuyển sang insert mode, nơi bạn có thể gõ ký tự.
Nhấn Esc đưa bạn về normal mode.
i vào insert mode, và Esc quay về normal mode.vi memo.txt # mở memo.txt (khởi động ở normal mode)
# nhấn i -> insert mode (bạn có thể gõ)
# gõ văn bản
# nhấn Esc -> quay về normal mode
Bị kẹt? Esc rồi :q! đưa bạn ra ngoài
Nếu bạn lỡ tay và màn hình có vẻ bị kẹt, hãy nhấn Esc vài lần rồi :q! để thoát và làm lại.
Cách này luôn đưa bạn an toàn về trạng thái ban đầu.
Lưu và bỏ — :wq và :q!
Gõ : ở normal mode mở một dòng lệnh nơi bạn có thể nhập các lệnh liên quan đến thoát.
:wq nghĩa là write and quit — tức là lưu và đóng.
:w chỉ lưu mà không thoát, và :q thoát khi không có thay đổi.
:q! bỏ các thay đổi và buộc thoát, quay về trạng thái trước khi chỉnh sửa.
| Phím / Lệnh | Chế độ | Hành động |
|---|---|---|
vi file | — | Mở một tệp (khởi động ở normal) |
i | Normal | Vào insert mode |
Esc | Insert | Quay về normal |
:w | Normal | Lưu (mà không thoát) |
:q | Normal | Thoát (khi không có thay đổi) |
:wq | Normal | Lưu và thoát |
:q! | Normal | Bỏ thay đổi và thoát |
:wq lưu thay đổi rồi thoát; :q! vứt bỏ thay đổi rồi thoát.:q! không giữ thay đổi nào
:q! thoát vứt bỏ mọi thay đổi của phiên chỉnh sửa đó.
Nó tiện khi bạn gõ nhầm và muốn làm lại, nhưng khi bạn có nội dung cần giữ, hãy dùng :wq.
vi draft.txt # mở
# i để chèn -> gõ văn bản -> Esc
# gõ :q! -> bỏ thay đổi và thoát (draft.txt vẫn rỗng)
cat draft.txt # không có gì được ghi
Làm nhiều hơn với vi — a / o và :w
i không phải cách duy nhất để vào insert mode.
a bắt đầu gõ ở bên phải con trỏ, còn o mở một dòng mới bên dưới con trỏ và bắt đầu gõ.
Chữ hoa A bắt đầu ở cuối dòng, và O mở một dòng mới bên trên con trỏ.
Tất cả đều quay về normal mode bằng Esc y như nhau.
Bạn cũng có thể dùng các lệnh lưu một cách chọn lọc.
:w chỉ lưu, mà không thoát, nên bạn có thể tiếp tục chỉnh sửa.
Với một lần chỉnh sửa dài, hãy lưu thường xuyên bằng :w và đóng bằng :wq ở cuối cho an toàn.
| Phím | Nơi bắt đầu gõ |
|---|---|
i | Bên trái con trỏ (trước nó) |
a | Bên phải con trỏ (sau nó) |
o | Trên một dòng mới mở bên dưới |
A | Ở cuối dòng |
O | Trên một dòng mới mở bên trên |
i bắt đầu từ bên trái, a từ bên phải, và o từ một dòng mới bên dưới. Tất cả quay lại bằng Esc.Xóa và sao chép dòng — dd / yy / p
Ở normal mode bạn có thể chỉnh sửa theo dòng mà không cần gõ ký tự.
dd xóa (cắt) toàn bộ dòng con trỏ đang ở.
x xóa một ký tự dưới con trỏ, và u hoàn tác thao tác trước (undo).
yy sao chép (yank) dòng con trỏ đang ở, và p dán nội dung đã sao chép — hoặc đã cắt bằng dd — vào dòng bên dưới con trỏ.
Một dòng cắt bằng dd cũng có thể dán bằng p, nên nó cũng dùng để di chuyển dòng.
| Phím | Hành động |
|---|---|
x | Xóa một ký tự dưới con trỏ |
dd | Xóa một dòng (cắt) |
3dd / d3d | Xóa nhiều dòng với số đếm (vd 3 dòng) |
yy | Sao chép một dòng (yank) |
10yy / y10y | Sao chép nhiều dòng với số đếm (vd 10 dòng) |
p | Dán dòng đã sao chép / đã cắt xuống dưới |
u | Hoàn tác thao tác trước |
dd cắt, yy sao chép, và p dán vào dòng bên dưới. Tất cả đều gõ ở normal mode.Thêm một số đếm ở phía trước cho phép bạn thao tác trên nhiều dòng cùng lúc.
3dd (hoặc d3d) xóa 3 dòng, và 10yy (hoặc y10y) sao chép 10 dòng.
Nếu bạn dán bằng p sau khi xóa hoặc sao chép, bạn có thể di chuyển hoặc nhân đôi nhiều dòng trong một thao tác.
3dd xóa 3 dòng, 10yy sao chép 10 dòng. Dán chúng cùng lúc bằng p.Di chuyển con trỏ và tìm kiếm — gg / G và / ?
Trong một tệp dài, nhảy một lần đưa bạn tới đích nhanh hơn di chuyển từng dòng.
gg đưa con trỏ tới dòng đầu của tệp, và G tới dòng cuối.
Ngay cả nơi gg không hoạt động, 1G di chuyển tới dòng đầu.
Để tìm văn bản, hãy dùng tìm kiếm.
Gõ /word và Enter tìm xuôi (xuống dưới) cho word từ con trỏ.
?word tìm ngược (lên trên), n di chuyển tới kết quả khớp tiếp theo cùng hướng, và N tới một kết quả khớp theo hướng ngược lại.
Tất cả đều gõ ở normal mode; không cần Esc.
| Phím | Hành động |
|---|---|
gg / 1G | Di chuyển tới dòng đầu |
G | Di chuyển tới dòng cuối |
/word | Tìm xuống dưới (xuôi) cho word |
?word | Tìm lên trên (ngược) cho word |
n / N | Tới kết quả tiếp theo / kết quả trước |
gg/G nhảy tới dòng đầu/cuối; /word tìm xuống dưới và ?word lên trên, với n/N di chuyển tới kết quả tiếp theo/trước.Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Bạn nhấn gì để quay từ insert mode về normal mode?
Câu 3Điều gì xảy ra khi bạn chạy :q!?