103.8 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
103 Lệnh GNU và Unix |
Mục tiêu: |
103.8 Chỉnh sửa Tệp cơ bản |
Bài: |
1 trên 1 |
Giới thiệu
Trong hầu hết các bản phân phối Linux, vi
— viết tắt của “visual” — luôn được cài đặt sẵn. Đây là trình soạn thảo tiêu chuẩn trong môi trường vỏ. Vi là một trình soạn thảo văn bản tương tác, nó sẽ hiển thị nội dung của tệp lên màn hình khi đang soạn thảo. Từ đó, nó cho phép người dùng di chuyển qua lại và thực hiện các sửa đổi ở bất kỳ đâu bên trong tài liệu. Tuy nhiên, không giống như các trình chỉnh sửa trực quan từ màn hình nền đồ họa, trình chỉnh sửa vi
là một ứng dụng vỏ với các phím tắt cho mọi tác vụ chỉnh sửa.
Có một chương trình thay thế cho vi
được gọi là vim
(vi cải tiến) đôi khi được sử dụng như một sự thay thế hiện đại cho vi
. Bên cạnh nhiều cải tiến, vim
còn hỗ trợ đánh dấu nổi cú pháp, hoàn tác/làm lại đa cấp độ và chỉnh sửa nhiều tài liệu. Mặc dù có nhiều tính năng hơn nhưng vim
vẫn hoàn toàn tương thích ngược với vi
và ta gần như sẽ không thể phân biệt được chúng trong hầu hết các tác vụ.
Cách tiêu chuẩn để bắt đầu vi
là cung cấp cho nó đường dẫn đến tệp dưới dạng tham số. Để chuyển trực tiếp đến một dòng cụ thể, số của nó phải được thông báo bằng dấu cộng (như trong vi +9 /etc/fstab
để mở /etc/fstab/
và đặt con trỏ ở dòng thứ 9; nếu không có số, dấu cộng sẽ tự đặt con trỏ ở dòng cuối cùng).
Giao diện của vi
rất đơn giản: toàn bộ không gian có sẵn trong cửa sổ dòng lệnh sẽ được sử dụng để hiển thị tệp (thường được thông báo dưới dạng đối số lệnh) cho người dùng. Dấu hiệu trực quan duy nhất là một dòng chân trang hiển thị vị trí hiện tại của con trỏ và dấu ngã ~
cho biết nơi tệp kết thúc. Có các chế độ thực thi khác nhau cho vi
khi hành vi của chương trình thay đổi, phổ biến nhất là chế độ chèn và chế độ thường.
Chế độ Chèn
Chế độ chèn rất đơn giản: văn bản sẽ xuất hiện trên màn hình khi nó được gõ trên bàn phím. Đây là kiểu tương tác mà đa số người dùng đều mong đợi từ một trình soạn thảo văn bản, nhưng nó không phải là phương thức trình bày tài liệu đầu tiên của vi
. Để vào chế độ chèn, người dùng phải thực hiện lệnh chèn ở chế độ thường. Phím Esc sẽ kết thúc chế độ chèn và trở về chế độ thường - tức chế độ vi
mặc định.
Note
|
Nếu muốn biết thêm về các chế độ thực thi khác, hãy mở :help vim-modes-intro |
Chế độ Thường
Chế độ thường — còn được gọi là chế độ lệnh — là cách vi
bắt đầu theo mặc định. Ở chế độ này, các phím trên bàn phím được liên kết với các lệnh cho các tác vụ điều hướng và thao tác văn bản. Hầu hết lệnh trong chế độ này là các phím đơn. Một số phím và chức năng của chúng ở chế độ thường là:
0
,$
-
Đi tới đầu và cuối dòng.
1G
,G
-
Đi tới đầu và cuối tài liệu.
(
,)
-
Đi tới đầu và cuối câu.
{
,}
-
Đi tới đầu và cuối đoạn văn.
w
,w
-
??????Nhảy tới từ và nhảy tới từ bao gồm cả dấu chấm câu.
h
,j
,k
,l
-
Trái, xuống, lên, phải.
e
hoặcE
-
Đi tới cuối từ hiện tại.
/
,?
-
Tìm kiếm tiến và lùi.
i
,I
-
Chèn vào trước vị trí con trỏ hiện tại và ở đầu dòng hiện tại.
a
,A
-
Chèn vào sau vị trí con trỏ hiện tại và ở cuối dòng hiện tại.
o
,o
-
Thêm một dòng mới và chèn vào dòng tiếp theo hoặc dòng trước.
s
,S
-
Xóa ký tự dưới con trỏ hoặc toàn bộ dòng và vào chế độ chèn.
c
-
Thay đổi (các) ký tự bên dưới con trỏ.
r
-
Thay thế ký tự dưới con trỏ.
x
-
Xóa các ký tự đã chọn hoặc ký tự bên dưới con trỏ.
v
,v
-
Bắt đầu một vùng chọn mới với ký tự hiện tại hoặc toàn bộ dòng.
y
,yy
-
Sao chép (kéo) các ký tự hoặc toàn bộ dòng.
p
,p
-
Dán nội dung đã sao chép vào trước hoặc sau vị trí hiện tại.
u
-
Hoàn tác hành động cuối cùng.
Ctrl-R
-
Làm lại hành động cuối cùng.
ZZ
-
Đóng và lưu.
ZQ
-
Đóng và không lưu.
Nếu có một số đứng trước, lệnh sẽ được thực thi với đúng số lần đó. Ví dụ: nhấn 3yy
để sao chép dòng hiện tại cộng với hai dòng tiếp theo, nhấn d5w
để xóa từ hiện tại và 4 từ tiếp theo, v.v.
Hầu hết các tác vụ chỉnh sửa đều là sự kết hợp giữa các lệnh. Ví dụ: chuỗi phím vey
được sử dụng để sao chép một vùng chọn bắt đầu từ vị trí hiện tại cho đến hết từ hiện tại. Việc lặp lại lệnh cũng có thể được sử dụng trong các kết hợp. Vì vậy, v3ey
sẽ sao chép một vùng chọn bắt đầu từ vị trí hiện tại cho đến khi kết thúc từ thứ ba tính từ đó.
vi
có thể sắp xếp văn bản đã sao chép trong các thanh ghi và cho phép giữ các nội dung riêng biệt cùng một lúc. Một thanh ghi sẽ được chỉ định bởi một ký tự với ký tự "
đứng trước. Sau khi được tạo, nó sẽ được lưu giữ cho đến khi kết thúc phiên hiện tại. Chuỗi phím "ly
sẽ tạo một thanh ghi chứa vùng chọn hiện tại có thể được truy cập thông qua phím l
. Sau đó, thanh ghi l
có thể được dán bằng "lp
.
Ngoài ra, chúng ta còn có một cách để đặt các dấu tùy chỉnh ở các vị trí tùy ý dọc theo văn bản để giúp ta dễ dàng và nhanh chóng di chuyển qua lại giữa chúng. Các dấu này được tạo bằng cách nhấn phím m
và sau đó nhấn một phím để xác định vị trí hiện tại. Sau khi thực hiện xong, con trỏ sẽ quay lại vị trí đã đánh dấu khi nhấn '
và theo sau là phím đã chọn.
Bất kỳ một chuỗi phím nào cũng có thể được ghi lại dưới dạng một macro để thực hiện trong tương lai. Ví dụ, một macro có thể được ghi lại để bao quanh một đoạn văn bản đã chọn trong dấu trích dẫn kép. Đầu tiên, một chuỗi văn bản sẽ được chọn và phím q
được nhấn, tiếp theo là một phím thanh ghi để liên kết với macro, chẳng hạn như d
. Dòng recording @d
sẽ xuất hiện ở dòng chân trang, cho biết rằng quá trình ghi đang hoạt động. Vì giả định rằng một đoạn văn bản đã được chọn nên lệnh đầu tiên là x
sẽ xóa (và tự động sao chép) văn bản đã chọn. Sau đó, ta nhấn phím i
để chèn hai dấu trích dẫn kép vào vị trí hiện tại, sau đó là Esc để trở về chế độ thường. Lệnh cuối cùng là P
dùng để chèn lại vùng chọn đã xóa ngay trước dấu trích dẫn kép cuối cùng. Bây giờ, việc nhấn lại q
sẽ kết thúc quá trình ghi. Một macro bao gồm chuỗi x
, i
, ""
, Esc và P
sẽ thực thi mỗi khi các phím @d
được nhấn ở chế độ thường, trong đó, d
là phím thanh ghi được liên kết với macro.
Tuy nhiên, macro sẽ chỉ khả dụng trong phiên hiện tại. Để làm cho macro tồn tại lâu dài, chúng phải được lưu trữ trong tệp cấu hình. Vì hầu hết các bản phân phối hiện đại đều sử dụng vim làm trình chỉnh sửa tương thích với vi nên tệp cấu hình của người dùng sẽ là ~/.vimrc
. Bên trong ~/.vimrc
, dòng let @d = 'xi""^[P'
sẽ đặt thanh ghi d
thành chuỗi phím bên trong dấu trích dẫn đơn. Ta có thể sử dụng cùng một thanh ghi đã gán trước đó cho một macro để dán chuỗi phím của nó.
Lệnh Dấu hai chấm
Chế độ thường cũng hỗ trợ một tập hợp các lệnh vi
khác là các lệnh dấu hai chấm. Đúng như tên của nó, các lệnh dấu hai chấm được thực thi sau khi ta nhấn phím dấu hai chấm : ở chế độ thường. Các lệnh dấu hai chấm cho phép người dùng thực hiện tìm kiếm, lưu, thoát, chạy các lệnh vỏ, thay đổi cài đặt vi
, v.v. Để quay lại chế độ thường, ta phải thực thi lệnh :visual
hoặc nhấn phím Enter không đi kèm với bất kỳ lệnh nào. Một số lệnh dấu hai chấm phổ biến nhất sẽ được chỉ ra sau đây (chữ cái đầu tiên không phải là một phần của lệnh):
:s/REGEX/TEXT/g
-
Thay thế tất cả các lần xuất hiện của biểu thức chính quy
REGEX
bằngTEXT
trong dòng hiện tại. Nó chấp nhận cùng một cú pháp của lệnhsed
bao gồm cả địa chỉ. :!
-
Chạy lệnh vỏ sau.
:quito
hoặc:q
-
Thoát khỏi chương trình.
:quit!
hoặc:q!
-
Thoát khỏi chương trình mà không lưu.
:wq
-
Lưu và thoát.
:exit
hoặc:x
hoặc:e
-
Lưu và thoát nếu cần.
:visual
-
Quay trở lại chế độ điều hướng.
Chương trình vi
tiêu chuẩn có khả năng thực hiện hầu hết các tác vụ chỉnh sửa văn bản, nhưng bất kỳ trình soạn thảo phi đồ họa nào khác cũng đều có thể được sử dụng để chỉnh sửa tệp văn bản trong môi trường vỏ.
Tip
|
Người dùng mới có thể sẽ gặp khó khăn trong việc ghi nhớ tất cả các phím lệnh của |
Trình chỉnh sửa thay thế
Người dùng không quen với vi
có thể sẽ gặp khó khăn khi thích ứng với nó vì hoạt động của nó không trực quan. Một giải pháp thay thế đơn giản hơn là GNU nano
- một trình soạn thảo văn bản nhỏ cung cấp tất cả các tính năng chỉnh sửa văn bản cơ bản như hoàn tác/làm lại, đánh dấu nổi cú pháp, tìm kiếm và thay thế tương tác, tự động thụt lề, đánh số dòng, hoàn thành từ, khóa tệp, sao lưu tệp và hỗ trợ quốc tế hóa. Không giống như vi
, tất cả các lần nhấn phím sẽ chỉ được chèn vào tài liệu đang được chỉnh sửa. Các lệnh trong nano
được cung cấp bằng cách sử dụng phím Ctrl hoặc phím Meta (tùy thuộc vào loại hệ thống, Meta có thể là Alt hoặc ⌘).
Ctrl-6
hoặcMeta-A
-
Bắt đầu một vùng chọn mới. Cũng có thể tạo vùng chọn bằng cách nhấn Shift và di chuyển con trỏ.
Meta-6
-
Sao chép vùng chọn hiện tại.
Ctrl-K
-
Cắt vùng chọn hiện tại.
Ctrl-U
-
Dán nội dung đã sao chép.
Meta-U
-
Hoàn tác.
Meta-E
-
Làm lại.
Ctrl-\
-
Thay thế văn bản tại vùng chọn.
Ctrl-T
-
Bắt đầu phiên kiểm tra chính tả cho tài liệu hoặc vùng chọn hiện tại.
Emacs là một trình soạn thảo văn bản rất phổ biến khác cho môi trường vỏ. Trong khi văn bản có thể được đưa vào chỉ bằng cách nhập qua bàn phím (như trong nano
) thì việc điều hướng trong tài liệu lại được hỗ trợ bởi các lệnh trên bàn phím (như trong vi
). Emacs bao gồm nhiều tính năng giúp nó không chỉ đơn giản là một trình soạn thảo văn bản mà còn là một IDE (môi trường phát triển tích hợp) có khả năng biên dịch, chạy và thử nghiệm các chương trình. Emacs có thể được cấu hình như một ứng dụng khách email, tin tức hoặc RSS và khiến nó trở thành một bộ ứng dụng có năng suất rất cao.
Bản thân vỏ sẽ chạy một trình soạn thảo văn bản mặc định (thường là vi
) mỗi khi cần thiết. Điều này cũng đúng trong trường hợp ví dụ như khi crontab -e
được thực thi để chỉnh sửa các công việc định kỳ (cronjobs). Bash sử dụng các biến phiên VISUAL
hoặc EDITOR
để tìm ra trình soạn thảo văn bản mặc định cho môi trường vỏ. Ví dụ: lệnh export EDITOR=nano
sẽ xác định nano
là trình soạn thảo văn bản mặc định trong phiên vỏ hiện tại. Để thực hiện thay đổi này liên tục trong các phiên, lệnh phải được đưa vào ~/.bash_profile
.
Bài tập Hướng dẫn
-
vi
được sử dụng nhiều nhất cho việc chỉnh sửa các tệp cấu hình và mã nguồn nơi việc thụt lề sẽ giúp xác định các phần của văn bản. Một vùng chọn có thể được thụt vào bên trái bằng cách nhấn<
và bên phải bằng cách nhấn>
. Những phím nào nên được nhấn ở chế độ thường để thụt lề ba bước sang trái cho vùng chọn hiện tại? -
Ta có thể chọn toàn bộ dòng bằng cách nhấn
V
ở chế độ thường củavi
. Tuy nhiên, ký tự xuống dòng kết thúc cũng sẽ được bao gồm. Những phím nào nên được nhấn ở chế độ thường để chọn từ ký tự bắt đầu cho đến cuối dòng nhưng không bao gồm ký tự xuống dòng? -
vi
nên được thực thi như thế nào trong dòng lệnh để mở~/.bash_profile
và chuyển thẳng đến dòng cuối cùng? -
Những phím nào nên được nhấn trong chế độ thường của
vi
để xóa các ký tự từ vị trí con trỏ hiện tại cho đến ký tự dấu chấm tiếp theo?
Bài tập Mở rộng
-
vim
cho phép chọn các khối văn bản có chiều rộng tùy ý chứ không chỉ các phần có toàn bộ dòng. Bằng cách nhấn Ctrl+V ở chế độ thường, một vùng chọn sẽ được thực hiện bằng cách di chuyển con trỏ lên, xuống, sang trái và phải. Bằng cách sử dụng phương pháp này, làm cách nào để xóa một khối bắt đầu từ ký tự đầu tiên trong dòng hiện tại có chứa tám cột và năm dòng văn bản tiếp theo? -
Phiên
vi
bị gián đoạn do mất điện đột xuất. Khi mở lại tệp,vi
sẽ nhắc người dùng nếu họ muốn khôi phục tệp hoán đổi (bản sao tự động dovi
tạo). Người dùng nên làm gì để loại bỏ tệp hoán đổi? -
Trong một phiên
vim
, trước đó đã có một dòng được sao chép vào thanh ghil
. Tổ hợp phím nào sẽ ghi một macro trong thanh ghia
để dán dòng trong thanh ghil
vào ngay trước dòng hiện tại?
Tóm tắt
Bài học này đã nói về trình soạn thảo văn bản tiêu chuẩn cho môi trường vỏ Linux là vi
. Mặc dù có vẻ hơi phức tạp đối với những người dùng mới nhưng vi
có các tính năng khiến nó trở thành một lựa chọn tốt trong việc chỉnh sửa văn bản kỹ thuật và phi kỹ thuật. Bài học đã đi qua các bước sau:
-
Cách sử dụng cơ bản và các tính năng hữu ích của
vi
. -
vim
— tứcvi
cải tiến — là gì và các trình soạn thảo thay thế khác. -
Cách xác định trình soạn thảo văn bản mặc định cho môi trường vỏ.
Các lệnh và tiến trình đã được nhắc đến là:
-
Trình chỉnh sửa
vi
và phiên bản cải tiến của nóvim
. -
Chỉnh sửa văn bản cơ bản trong
vi
. -
Trình chỉnh sửa thay thế
emacs
vànano
.
Đáp án Bài tập Hướng dẫn
-
vi
được sử dụng nhiều nhất cho việc chỉnh sửa các tệp cấu hình và mã nguồn nơi việc thụt lề sẽ giúp xác định các phần của văn bản. Một vùng chọn có thể được thụt vào bên trái bằng cách nhấn<
và bên phải bằng cách nhấn>
. Những phím nào nên được nhấn ở chế độ thường để thụt lề ba bước sang trái cho vùng chọn hiện tại?3<
, tức ba bước về bên trái. -
Ta có thể chọn toàn bộ dòng bằng cách nhấn
V
ở chế độ thường củavi
. Tuy nhiên, ký tự xuống dòng kết thúc cũng sẽ được bao gồm. Những phím nào nên được nhấn ở chế độ thường để chọn từ ký tự bắt đầu cho đến cuối dòng nhưng không bao gồm ký tự xuống dòng?Các phím
0v$h
, tức0
(“nhảy đến đầu dòng”),v
(“bắt đầu chọn ký tự”),$
(“đi đến cuối dòng`) ") vàh
("`quay lại một vị trí”). -
vi
nên được thực thi như thế nào trong dòng lệnh để mở~/.bash_profile
và chuyển thẳng đến dòng cuối cùng?Lệnh
vi + ~/.bash_profile
sẽ mở tệp và đặt con trỏ ở dòng cuối cùng. -
Những phím nào nên được nhấn trong chế độ thường của
vi
để xóa các ký tự từ vị trí con trỏ hiện tại cho đến ký tự dấu chấm tiếp theo?Các phím
dt.
, tứcd
(“bắt đầu xóa”),t
(“nhảy tới ký tự sau”) và.
(ký tự dấu chấm).
Đáp án Bài tập Mở rộng
-
vim
cho phép chọn các khối văn bản có chiều rộng tùy ý chứ không chỉ các phần có toàn bộ dòng. Bằng cách nhấn Ctrl+V ở chế độ thường, một vùng chọn sẽ được thực hiện bằng cách di chuyển con trỏ lên, xuống, sang trái và phải. Bằng cách sử dụng phương pháp này, làm cách nào để xóa một khối bắt đầu từ ký tự đầu tiên trong dòng hiện tại có chứa tám cột và năm dòng văn bản tiếp theo?Tổ hợp
0
,Ctrl-V
và8l5jd
sẽ chọn và xóa khối tương ứng. -
Phiên
vi
bị gián đoạn do mất điện đột xuất. Khi mở lại tệp,vi
sẽ nhắc người dùng nếu họ muốn khôi phục tệp hoán đổi (bản sao tự động dovi
tạo). Người dùng nên làm gì để loại bỏ tệp hoán đổi?Nhấn
d
khi được nhắc bởivi
. -
Trong một phiên
vim
, trước đó đã có một dòng được sao chép vào thanh ghil
. Tổ hợp phím nào sẽ ghi một macro trong thanh ghia
để dán dòng trong thanh ghil
vào ngay trước dòng hiện tại?Tổ hợp
qa"lPq
, tứcq
(“bắt đầu ghi macro”),a
(“gán thanh ghia
cho macro”),"l
(“chọn văn bản trong thanh ghil
”),P
(“dán trước dòng hiện tại”) vàq
(“kết thúc ghi macro”).