Trình soạn thảo vi trong Unix/Linux

Có rất nhiều cách để chỉnh sửa các file trong Unix và đối với tôi, một trong những cách tốt nhất là sử dụng Bộ (Trình) soạn thảo hướng màn hình vi. Bộ soạn thảo này cho bạn có thể chỉnh sửa các dòng trong nội dung với các dòng khác trong file.

Ngày nay bạn sẽ tìm thấy một phiên bản được nâng cấp của Bộ soạn thảo vi mà được gọi là VIM. VIM là viết tắt của Vi Improved.

Bộ soạn thảo vi thường được cân nhắc là tiêu chuẩn thực quyền trong Bộ soạn thảo Unix bởi vì:

  • Nó thường có sẵn trên tất cả các phiên bản của hệ thống Unix;
  • Trình thực hiện của nó tương tự như bảng;
  • Nó yêu cầu rất ít nguồn cho nó;
  • Nó thân thiện hơn các Bộ soạn thảo khác như ed hoặc ex.
  • Bạn có thể sử dụng Bộ soạn thảo vi để chỉnh sửa một file đang hiện hữu hoặc tạo một file mới từ scratch. Bạn cũng có thể sử dụng Bộ soạn thảo này chỉ để đọc một file văn bản.

Bắt đầu chạy Bộ soạn thảo vi trong Unix/Linux

Có những cách sau mà bạn có thể sử dụng để bắt đầu chạy Bộ soạn thảo vi:             

LệnhMiêu tả
vi  filenameTạo một file mới nếu nó đã  không tồn tại, nếu không thì mở một file đang tồn tại.
vi  -R filenameMở một file đang tồn tại  trong chế độ chỉ đọc.
view  filenameMở một file đang tồn tại  trong chế độ chỉ đọc.


Dưới đây là ví dụ để tạo một file mới testfile nếu nó đã không tồn tại trong thư mục làm việc hiện tại:

$vi testfile

Bạn có thể quan sát kết quả giống như sau trên màn hình:

|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]    

Bạn sẽ chú ý một dấu ngã (~) trên mỗi dòng con trỏ. Dấu ngã này đại diện cho một dòng chưa được sử dụng. Nếu một dòng không bắt đầu với dấu ngã và xuất hiện khoảng trắng, có thể là một khoảng trống, tab, dòng mới hoặc một vài ký tự không nhìn thấy.

Vì thế bây giờ bạn đã mở một file để bắt đầu nó. Trước khi thực hiện các tiến trình xa hơn, chúng ta cùng tìm hiểu một vài khái niệm quan trọng được giải thích bên dưới.

Các chế độ hoạt động trong Unix/Linux:

Trong khi làm việc với bộ soạn vi, bạn sẽ tình cờ theo hai chế độ sau:

  • Chế độ lệnh (Command mode): Chế độ này cho bạn có thể thực hiện các nhiệm vụ hành chính như lưu file, chạy lệnh, di chuyển con trỏ, cắt và dán các dòng hoặc từ, và tìm kiếm và đổi vị trí. Trong chế độ này, bất cứ cái gì bạn gõ vào được hệ thống biên dịch (hiểu) như một lệnh.
  • Chế độ chèn (Insert mode): Chế độ này cho bạn có thể chèn văn bản vào trong file. Mọi thứ mà được gõ vào trong chế độ này được hệ thống hiểu như là một đầu vào và cuối cùng nó đặt vào trong file.

Bộ soạn thảo vi thường bắt đầu với chế độ lệnh. Để nhập văn bản, bản phải trong chế độ chèn. Để vào chế độ chèn, đơn giản bạn chỉ cần gõ i. Để thoát khỏi chế độ chèn, nhấn phím Esc, mà sẽ đặt bạn quay trở lại chế độ lệnh.

Gợi ý: Nếu bạn không chắc chắn về chế độ mà bạn đang ở trong, nhấn phím Esc hai lần, và sau đó bạn sẽ trong chế độ lệnh. Bạn mở một file bằng cách sử dụng Bộ soạn thảo vi và bắt đầu gõ một vài ký tự, sau đó bạn vào chế độ lệnh để thấy sự khác nhau.

Thoát khỏi vi trong Unix/Linux

Lệnh để thoát khỏi Bộ soạn thảo vi là :q. Một khi đang trong chế độ lệnh, gõ dấu hai chấm và q và dấu ! theo sau. Nếu file của bạn đã được chỉnh sửa theo cách nào đó, Bộ soạn thảo sẽ cảnh báo bạn về điều này và không cho bạn thoát khỏi nó. Để bỏ qua thông báo này, lệnh để thoát khỏi vi mà không lưu các chỉnh sửa là :q!. Lệnh này giúp bạn thoát khỏi vi mà không lưu bất cứ sự thay đổi nào mà bạn đã tạo ra tới file.

Lệnh để lưu nội dung của Bộ soạn thảo vi là :w. Bạn có thể so khớp lệnh trên với lệnh quit, hoặc :wq và dấu quay lại !.

Cách dễ nhất để lưu các thay đổi và thoát khỏi vi là lệnh ZZ. Khi bạn đang trong chế độ lệnh, gõ ZZ và nó sẽ làm việc tương tự như lệnh :wq.

Bạn có thể xác định tên các file khác nhau để lưu bằng cách xác định tên file sau :w. Ví dụ, nếu bạn muốn lưu file bạn đang làm việc thành một file khác có tên là filename2, bạn sẽ gõ :wfilename2 và dấu !. Bạn tự mình thử nhé.

Di chuyển trong một file trong Unix/Linux

Để di chuyển xung quanh trong một file mà không ảnh hưởng đến văn bản, bạn phải trong chế độ lệnh (nhấn phím Esc hai lần). Tại đây có một vài lệnh mà bạn có thể sử dụng để di chuyển xung quanh một ký tự tại cùng một thời gian.                

LệnhMiêu tả
kDi chuyển con trỏ lên trên  một dòng.
jDi chuyển con trỏ xuống một  dòng.
hDi chuyển con trỏ sang trái  một ký tự.
lDi chuyển con trỏ sang phải  một ký tự.


Có hai điểm quan trọng mà bạn cần ghi nhớ:

  • Bộ soạn thảo vi là phân biệt chữ hoa và thường, vì thế bạn cần chú ý khi viết chữ hoa trong khi sử dụng lệnh.
  • Hầu hết các lệnh trong vi có thể được mở đầu bằng số lần bạn muốn hành động xảy ra. Ví dụ, 2j là di chuyển con trỏ xuống 2 dòng.

Có nhiều cách khác để di chuyển trong một file trong vi. Nhớ rằng bạn phải trong chế độ lệnh (nhấn Esc hai lần). Dưới đây là một bảng liệt kê các lệnh khác mà bạn có thể sử dụng để di chuyển xung quanh file: 

LệnhMiêu tả
0 or |Đặt vị trí con trỏ tại đầu dòng.
$Đặt vị trí con trở ở cuối dòng.
wĐặt vị trí con trỏ ở từ tiếp theo.
bĐặt vị trí con trỏ ở từ trước.
(Đặt vị trí con trỏ ở đầu câu văn hiện tại.
)Đặt vị trí con trỏ ở đầu câu văn kế tiếp.
EDi chuyển tới phần cuối của từ được giới hạn khoảng trắng.
{Di chuyển tới đoạn văn sau.
}Di chuyển về đoạn văn trước.
[[Di chuyển tới khu vực sau.
]]Di chuyển về khu vực trước.
n|Di chuyển tới cột n trong dòng hiện tại.
1GDi chuyển tới dòng đầu tiên của file.
GDi chuyển tới dòng cuối cùng của file.
nGDi chuyển tới dòng thứ n của file.
:nDi chuyển tới dòng thứ n của file.
fcDi chuyển thuận tiến tới c
FcDi chuyển ngược lại tới c
HDi chuyển tới đầu của màn hình.
nHDi chuyển tới dòng thứ n tính từ đầu của màn hình.
MDi chuyển tới giữa màn hình.
LDi chuyển tới cuối cùng màn hình.
nLDi chuyển tới dòng thứ n tính từ cuối cùng của màn hình.
:xDấu hai chấm theo sau bởi một số sẽ đặt vị trí của con trỏ trên dòng số x


Các lệnh điều khiển trong Unix/Linux

Các lệnh dưới đây hữu dụng mà bạn có thể sử dụng song song với phím control: 

LệnhMiêu tả
CTRL+dDi chuyển tiến tới 1/2 màn hình.
CTRL+dDi chuyển tiến tới 1/2 màn hình.
CTRL+fDi chuyển tiến tới một màn hình đầy đủ.
CTRL+uDi chuyển ngược về sau 1/2 màn hình.
CTRL+bDi chuyển ngược về sau một màn hình.
CTRL+eDi chuyển màn hình lên một dòng.
CTRL+yDi chyển màn hình xuống một dòng.
CTRL+uDi chuyển màn hình lên 1/2 trang.
CTRL+dDi chuyển màn hình xuống 1/2 trang.
CTRL+bDi chuyển màn hình lên một trang.
CTRL+fDi chuyển màn hình xuống một trang.
CTRL+IKéo màn hình ngược lại.


Chỉnh sửa file trong Unix/Linux

Để chỉnh sửa file, bạn cần trong chế độ chèn. Có nhiều cách để vào chế độ chèn từ chế độ lệnh. 

LệnhMiêu tả
iChèn văn bản trước vị trí con trỏ hiện tại.
IChèn văn bản ở phần đầu dòng hiện tại.
aChèn văn bản sau vị trí con trỏ hiện tại.
AChèn văn bản tại phần cuối của dòng hiện tại.
oTạo một dòng mới để nhập văn bản dưới vị trí con trỏ hiện tại.
OTạo một dòng mới để nhập văn bản trên vị trí con trỏ hiện tại.


Xóa các ký tự trong Unix/Linux

Dưới đây liệt kê các lệnh quan trọng mà có thể được sử dụng để xóa các ký tự và các dòng trong một file đã mở: 

LệnhMiêu tả
xXóa một ký tự dưới vị trí con trỏ hiện tại.
XXóa một ký tự trước vị trí con trỏ hiện tại.
dwXóa từ vị trí con trỏ hiện tại tới từ kế tiếp.
d^Xóa từ vị trí con trỏ hiện tại tới phần bắt đầu của dòng.
d$Xóa từ vị trí con trỏ hiện tại tới phần cuối của dòng.
DXóa từ vị trí con trỏ hiện tại tới phần cuối của dòng hiện tại.
ddXóa dòng mà con trỏ hiện tại đang ở trên.


Như đã đề cập ở trên, hầu hết các lệnh trong vi có thể được đặt ở trước bởi số lần bạn muốn hành động xảy ra. Ví dụ, 2x sẽ xóa 2 ký tự dưới vị trí con trỏ hiện tại và 2dd sẽ xóa 2 dòng mà con trỏ đang ở trên đó hiện tại.

Chúng tôi đề nghị bạn thực hành các lệnh trên nhiều lần trước khi thực hiện các tiến trình phức tạp hơn.

Các lệnh thay đổi trong Unix/Linux

Bạn cũng có khả năng để thay đổi các ký tự, các từ,, hoặc dòng trong vi mà không cần xóa chúng. Dưới đây là các lệnh liên quan: 

LệnhMiêu tả
ccGỡ bỏ nội dung của dòng, làm cho bạn rời khỏi chế độ chèn.
cwThay đổi từ mà con trỏ đang ở tại đó, từ vị trí con trỏ tới vị trí chữ w thường cuối cùng của từ.
rĐổi vị trí của ký tự dưới vị trí con trỏ. Vi trở lại chế độ lệnh sau khi sự đổi vị trí này được thực hiện xong.
RGhi đè nhiều ký tự bắt đầu với ký tự hiện tại ở dưới con trỏ. Bạn phải sử dụng phím Esc để dừng việc ghi đè này.
sĐổi vị trí của ký tự hiện tại với ký tự mà bạn gõ vào. Sau đó, bạn bị rời khỏi chế độ chèn.
SXóa dòng mà con trỏ đang ở trên và thay đổi bằng một đoạn văn bản mới. Sau khi văn bản mới được nhập, vi vẫn giữ nguyên chế độ chèn.


Các lệnh sao chép và dán trong Unix/Linux

Bạn có thể sao chép các dòng hoặc các từ từ một vị trí và sau đó bạn dán chúng tại vị trí khác bằng cách sử dụng các lệnh sau: 

LệnhMiêu tả
yySao chép dòng hiện tại.
ywSao chép từ hiện tại từ ký tự chữ thường w con trỏ ở trên tới phần cuối của từ.
pDán bản sao sau vị trí con trỏ.
PDán bản sao trước vị trí con trỏ.


Các lệnh nâng cao trong Unix/Linux

Dưới đây liệt kê một số lệnh nâng cao mà làm đơn giản hóa việc chỉnh sửa thường ngày và mang lại nhiều hiệu quả hơn trong việc sử dụng vi: 

LệnhMiêu tả
JNhập dòng hiện tại với dòng kế tiếp.
<<Di chuyển dòng hiện tại sang trái một độ rộng shift.
>>Di chuyển dòng hiện tại sang phải một độ rộng shift.
~Chuyển kiểu của ký tự dưới vị trí con trỏ (VD: chữ hoa thành chữ thường ).
^GNhấn Ctrl+G cùng một lúc để chỉ trạng thái và tên file hiện tại.
UHồi phục dòng hiện tại trở về trạng thái trước khi con trỏ vào dòng đó.
uUndo các thay đổi vừa thực hiện với file. Nhập u lần nữa sẽ redo sự thay đổi.
JNhập dòng hiện tại với dòng kế tiếp.
:fHiển thị vị trí hiện tại của file trong % và tên file, tổng số file.
:f filenameĐặt lại tên hiện tại của file.
:w filenameGhi tên file
:e filenameMở một file khác với tên của nó.
:cd dirnameThay đổi thư mục làm việc hiện tại tới thư mục dirname.
:e #Sử dụng để chuyển đổi giữa hai file đã mở.
:nTrong trường hợp bạn mở nhiều file sử dụng vi, bạn sử dụng :n để tới file kế tiếp trong seri các file đó.
:pTrong trường hợp bạn mở nhiều file sử dụng vi, bạn sử dụng :p để tới file phía trước trong seri file đó.
:NTrong trường hợp bạn mở nhiều file sử dụng vi, bạn sử dụng :N để tới file phía trước trong seri file đó.
:r fileĐọc file và chèn nó sau dòng hiện tại.
:nr fileĐọc file và chèn nó sau dòng thứ n.


Tìm kiếm từ và ký tự trong Unix/Linux

Bộ soạn thảo vi có hai loại tìm kiếm: chuỗi và ký tự. Để tìm kiếm chuỗi, lệnh / và ? được sử dụng. Khi bạn bắt đầu những lệnh này, lệnh vừa được nhập vào sẽ được chỉ ở cuối cùng của dòng, tại đó bạn nhập một chuỗi cụ thể mà bạn muốn tìm để tìm kiếm nó.

Hai lệnh này chỉ khác nhau ở phương diện nơi mà nó diễn ra:

  • Lệnh / tìm kiếm theo chiều thuần về phía trước trong một file.
  • Lệnh ? tìm kiếm theo chiều ngược lại về phía sau trong một file.

Các lệnh n và N tương ứng lặp lại lệnh tìm trước theo cùng cách tìm hoặc theo hướng ngược lại. Một vài ký tự có ý nghĩa quan trọng trong khi sử dụng lệnh tìm kiếm và được đặt trước bởi một dấu \ để trở thành một phần của biểu thức cần tìm. 

Ký tựMiêu tả
^Tìm tại đầu của dòng. (Sử dụng tại phần bắt đầu của một biểu thức tìm kiếm.)
.So khớp với một ký tự đơn.
*So khớp với 0 hoặc nhiều ký tự trước.
$Cuối của dòng. (sử dụng tại phần cuối của biểu thức tìm kiếm.)
[Bắt đầu một thiết lập của biểu thức so khớp hoặc không so khớp.
<Đặt biểu thức tìm kiếm tách khỏi dấu chéo ngược \ để tìm phần cuối hoặc phần đầu của từ.
>Đặt biểu thức tìm kiếm tách khỏi dấu chéo ngược \ để tìm phần cuối hoặc phần đầu của từ.


Hoạt động tìm kiếm ký tự tìm kiếm trong một dòng để tìm một ký tự được nhập sau lệnh. Lệnh f và F chỉ tìm kiếm cho một ký tự trên dòng hiện tại. Lệnh f tìm kiếm thuận về phía trước và F tìm kiếm ngược về phía sau và con trỏ di chuyển tới vị trí của ký tự được tìm thấy.

Lệnh chỉ tìm kiếm một ký tự trên dòng hiện tại, nhưng với t, con trỏ di chuyển tới vị trí trước ký tự, và T tìm kiếm dòng về phía ngược lại tại vị trí sau ký tự.

Các lệnh set trong Unix/Linux

Bạn có thể tạo thay đổi màn hình hiển thị của vi bằng cách sử dụng lệnh :set. Để sử dụng những lệnh này, bạn phải vào chế độ lệnh sau đó gõ :set theo sau bởi một trong các chức năng sau: 

LệnhMiêu tả
:set icBỏ qua kiểu chữ (chữ hoa, thường) khi tìm kiếm.
:set aiThiết lập chế độ thụt vào đầu dòng tự động.
:set noaiĐể không đặt chế độ thụt vào đầu dòng tự động.
:set nuHiển thị các dòng với số dòng trên cạnh trái.
:set swThiết lập độ rộng của điểm dừng tab của một phần mềm. Ví dụ bạn có thể thiết lập một độ rộng shift là 4 với lệnh này :set sw=4
:set wsNếu wrapscan được thiết lập, nếu từ không được tìm thấy tại phần cuối cùng của file, nó sẽ cố gắng để tìm kiếm tại phần bắt đầu.
:set wmNếu chức năng này có một giá trị lớn hơn 0, Bộ soạn thảo sẽ tự động bao lề ký tự (word wrap). Ví dụ, để thiết lập lề bao tới hai ký tự, bạn sẽ gõ thế này :set wm=2
:set roThay đổi kiểu file thành "chỉ đọc (read only)"
:set termIn kiểu terminal.
:set bfBỏ qua việc điều khiển ký tự từ đầu vào.


Chạy các lệnh trong Unix/Linux

Bộ soạn thảo vi có khả năng chạy các lệnh từ trong Bộ soạn thảo. Để chạy một lệnh, bạn chỉ cần tiến vào chế độ lệnh và nhập lệnh :!.

Ví dụ, nếu bạn muốn kiểm tra một file có tồn tại không trước khi bạn cố gắng để lưu file với tên đã cho, bạn có thể nhập :! ls và bạn sẽ thấy kết quả của lệnh ls trên màn hình.

Khi bạn nhấn bất kỳ phím nào, bạn được quay trở lại khu vực vi của bạn.

Thay thế văn bản trong Unix/Linux

Lệnh thay thế (:s/) cho bạn có thể nhanh chóng đổi các từ hoặc nhóm từ trong file của bạn. Dưới đây là cú pháp đơn giản:

:s/search/replace/g

Ký tự g đại diện cho toàn cầu (globally). Kết quả của lệnh này là tất cả các sự kiện diễn ra trên dòng mà con trỏ tại đó đã được thay đổi.

Các điểm quan trọng trong Unix/Linux:

Dưới đây là các điểm quan trọng giúp bạn thành công khi sử dụng vi:

  • Bạn phải trong chế độ lệnh để sử dụng các lệnh. (Nhấn phím Esc hai lần vào bất cứ lúc nào để đảm bảo bạn trong chế độ lệnh).
  • Bạn phải cẩn thận để sử dụng các kiểu chữ (hoa và thường) cho tất cả các lệnh.
  • Bạn phải trong chế độ chèn để nhập văn bản.

Bình luận