Kiến Thức Cơ Bản Slackware Linux
5.8 vi
vi(1) là một
trình soạn thảo tiêu chuẩn của Unix,mà được sử dụng
trong các hệ thống bởi các adminstrator.Có nhiều
phiên bản của vi: vi,elvis,vile,vim.Một trong số chúng
có ở bất kì phiên bản Unix và Linux.Tất cả
chúng đều sử dụng một tập hợp các lệnh cở bản,vì
vậy sử dụng thành thạo các lệnh cơ bản bạn sẽ dễ
dàng sử dụng trong các phiên bản khác.
vi chứa một tập hợp
các công cụ trợ giúp hùng mạnh,bao gồm:cấu
trúc ánh sáng(syntax highlighting),định dạng
mã(code formatting),macro,cơ chế tìm kiếm và thay
thế....Những công cụ này làm cho vi trở lên
đặc biệt với các nhà lập trình.Hệ thống
administrators sẽ đánh giá cao khả năng tự động và
liên kết với shell.
Trong Slackware phiên bản vi là elsvi(theo mặc
định).Các phiên phản khác cũng có thể sử dụng
là vim và gvim nếu bạn cài đặt theo packages tương
ứng.
5.8.1 Khởi động
vi
vi có thể chạy từ vỏ
lệnh theo nhiều cách khác nhau:
$ vi
Lệnh trên sẽ chạy vi từ một buffer rỗng,bạn sẽ
nhìn thấy một màn hình trống không.Chương
trình bấy giờ đang chờ đợi bạn làm một điều gì
đó.Bạn hãy đọc tiếp phần sau để biết các
cách chạy vi.Để thoát khỏi vi hãy nhập vào
:q
Nếu như không có gì thay đổi trên tập tin
thì bạn sẽ thoát khỏi chương trình.Nếu bạn thay đổi
điều gì đó thì chương trình sẽ thông
báo cho bạn rằng nội dung đã bị thay đổi và
bạn sẽ thoát trong khi các thay đổi đó không
được lưu lại.
Bạn có thể mở một tập tin đã có sẵn bằng
vi.Ví dụ để mở /etc/resolv.conf cần thực hiên:
$ vi /etc/resolv.conf
Cũng như thế vi có thể mở tập tin tại một dòng được định
trước.Ví dụ như chạy vi từ dòng 47 của tập tin
/usr/src/linux/init/main.c,bạn cần làm như sau:
$ vi +47 /usr/src/linux/init/main.c
vi hiển thị trên
màn hình nội dung tập tin được chỉ ra và con trỏ
được đặt tại dòng 47.Nêu như con số đưa ra lớn hơn so với
tổng số dòng có trên tập tin thì con trỏ sẽ
chuyển đến dòng cuối cùng của tập tin.Điều này
có lợi cho các nhà lập trình khi họ muốn mở
tập lệnh tại dòng bị lỗi.
5.8.2 Chế độ
làm việc
vi được sử dụng trong các
chế độ khác nhau,cho các mục đích khác
nhau.Nếu bạn chạy vi là bạn vào ngay chế độ câu
lệnh.Tại đây bạn có thể thực hiện những lệnh khác
nhau để soạn thảo văn bản,dị chuyển bên trong tập tin,lưu trữ
và thoát khỏi nó.Để thay đổi văn bản hãy
dùng chế độ insert(lồng vào).Bạn có thể chuyển đổi
giữa các chế độ khác nhau với tổ hợp phím được ghi
ở dưới.
Chế độ câu lệnh
Dầu tiên bạn rơi vào chế độ câu lệnh.Từ chế độ
này bạn không thể đánh thẳng nội dung vào
được hoặc soản thảo lại tập tin có sẵn.Nhưng bạn có thể
điều khiển văn bản,tìm kiếm,thoát..Tất cả chỉ là
ảnh của chế độ câu lệnh.Để xem các lệnh khác nhau
,hãy xem phần 5.8.7
Có lẽ thông thườn người ta sử dụng lệnh ở chế độ câu
lệnh để chuyển sang chế độ insert.Hãy nhấn i và bạn đi
vào chế độ insert.Con trỏ được thay đổi hình dạng
và dòng " -INSERT-" sẽ sáng lên ở góc
cuối màn hình(trong các bản sao không
có).Trong chế độ này bạn có thể nhập vào
các câu,dòng,đoạn văn bản.. và nó sẽ
hiển thị trên màn hình.Để chuyển về chế độ câu
lệnh hãy nhấn ESC.
Chế độ câu lệnh thuận tiện thể di chuyển bên trong tập
tin.Trên các hệ thống khác có thể sử dụng
các phím lên,xuống,trái,phải để điều
khiển.Trong các hệ thống khác bạn sẽ phải sử dụng
cách truyền thống là "hjkl".
Chỉ đơn giản sư dụng chữ cái tương ứng với các hướng cần
thiết.Tuy nhiên vẫn có các tổ hợp phím
làm cho qúa trình di chuyển nhanh hơn.Rất nhiều
lệnh trong chế độ này bắt đầu bằng dấu ":".Ví dụ để
thoát ra chương trình ":q"....
Dấu ":" đơn giản chỉ ra rằng:đây là lệnh,ở thời điểm
đấy.Còn "q" thông báo với vi là bạn muốn
thoát.Còn có các tổ hợp số(không nhất
thiết) và chữ.Trước các lệnh này,không
cần phải dùng ":",chúng được sử dụng để di chuyển trong
văn bản.
Ví dụ như để xoá một dòng từ tập tin.Hãy di
chuyển con trỏ đến dòng cần xóa và thực hiện
4dd,lúc đó vi sẽ xóa dòng tại vị trí
con trỏ và ba dòng sau nó.Nói chung con số
sẽ chỉ định số lần vi thực hiện.Ví dụ như 10k thì sẽ
di chuyển lên trên 10 dòng theo văn bản.
Chế độ câu lệnh cũng có thể dùng để cắt và
dán các đoạn văn bản và đọc các tập tin
khác ở buffer.Sao chép văn bản được thực hiện với sự
giúp đỡ của phím "y".Sao chép dòng hiện thời
bằng cách "yy" và có thể sử dụng số đi kèm
để sao chép liên tiếp nhiều dòng.Sau đó di
chuyển đến vị trí cần thiết và nhấn "p".Đoạn văn bản sẽ
được dán vào dòng hiện hành và
các dòng tiếp theo.
Cắt các đoạn văn bản thực hiện với sự giúp đỡ dd
và p,được sử dụng để dán các đoạn văn bản bị cắt
ngược lại vào tập tin.Đọc từ các tập tin khác
thì lại là một quá trình đơn giản.Hãy
nhấn ":r",dấu cách " ",và tên tập tin chứa đoạn văn
bản ấy mà bạn muốn dán.Nội dung của tập tin sẽ được chuyển
vào buffer tạm thời bắt đầu từ dòng mà con trỏ đứng
sau nó.Các bản sao hoàn thiện của vi kết
thúc các tập tin giống như làm việc trên
shell.
Chức năng cuối cùng trong chế độ này là tìm
kiếm.Chế độ câu lệnh cho phép tìm kiếm thông
thường và mở rộng.
Để tìm kiếm hãy nhấn "/" và nhập vào nội
dung cần tìm.vi sẽ bắt đầu tìm kiếm từ vị trí của
con trỏ và hướng đến cuối tập tin và dừng lại tại vị
trí trùng lặp đầu tiên.Chú ý
trùng lặp không hoàn toàn cũng làm cho
quá trình tìm kiếm dừng lại.Ví dụ như,cần
tìm kiếm "the" thì kết qủa có thể là "then"
hoặc "thenfor"...Kết qủa là những gì chứa "the".
Sau khi tìm thấy sự trùng lặp đầu tiên thì
bạn có thể tìm tiếp bằng cách nhấn "/" và
Enter.Có thể chỉ định hướng tìm kiếm từ vị trí con
trỏ đến đầu của tập tin.Để làm việc đó thay vào chỗ
của "/" bạn cần sử dụng "?".ví dụ: ?the(tìm kiếm "the" về
phía đầu của tập tin từ vị trí con trỏ).
Chế độ insert
Dán và thay thế các đoạn văn bản thực hiện trong
chế độ này.Giống như đã nói để chuyển sang chế độ
này cần nhấn "i",và tất cả những gì bạn viết được
chuyển vào buffer hiện thời.Nhân ESC để chuyển về chế độ
câu lệnh.
Thay thế nội dung các đoạn văn bản được thực hiện bởi nhiều
cách khác nhau.Nhấn "r" từ chế độ câu lệnh cho
phép bạn thay thê một kí tự tại vị trí con
trỏ.Đơn giản là nhập vào kí tự cần thiết và
nó sẽ chiếm lấy vị trí mà con trỏ đang sáng
nhấp nháy.Ngay sau khi bạn quay lại chế độ câu lệnh
hãy nhấn ngay "R",nó cho phép bạn thay thế bao
nhiêu tuỳ thích.Để thoát khỏi chế độ thay thế
hãy nhấn ESC và bạn rơi vào chế độ câu lệnh.
Còn có phương pháp khác để di chuyển giữa
dán và thay thế là nhấn nút "insert" từ chế
độ câu lệnh,nó sẽ đưa bạn vào chế độ insert.Khih bạn
đã ở chế độ insert rồi thì nút "insert" cho
phép bạn thay đổi giữa chế độ dán và thay thế.
5.8.3 Mở tập tin
vi cho phép mở các
tập tin từ chế độ câu lệnh như vỏ lệnh,hãy chỉ ra
tên tập tin sau chương trình.Để mở tập tin /etc/lilo.conf ta làm như sau:
:e /etc/lilo.conf
Nếu như trong buffer có những biến đổi mà chưa được lưu
lại thì vi sẽ thông báo cho bạn biết.Bạn có
thể mở tập tin mà không ghi buffer hiện thời là bằng
:e!,dấu cách,tên tập tin cần thiết.
Nếu bạn thích đọc lại tập tin hiện hành thì
có thể chạy e!.Điều này thuận lợi khi bạn làm hỏng
một cái gì đấy và muốn đọc lại.
Một vài bản sao của vi(như vim) cho phép mở nhiều buffer
cùng một lúc.Ví dụ để mở tập tin 09-vi.sgml ở trong
catalog home,và trong cùng thời điểm đấy mở một tập tin
khác.Tôi sử dụng:
:split /09-vi.sgml
Tập tin mới được hiện ra ở nửa màn hình phía
trên,còn tập tin cũ ở nửa dưới.Có rất nhiều lệnh để
điều khiển qúa trình phân chia màn
hình,và nhiều trong chúng giống như ở
EMACS.Hãy đọc trang man của chúng để có thêm
thông tin.
5.8.4 Lưu lại
các tập tin
Để lưu lại các tập tin ơ vi bạn có thể sử dụng nhiều lệnh
khác nhau.Nếu bạn muốn lưu buffer vào tập tin randomness
thì hãy thực hiện:
:w randomness
Sau đó,khi mà bạn đã lưu lại lần thứ nhất,để lập
lại lần thứ hai thì đơn giản hãy nhấn :w.Khi đó tất
cả những biến đổi sẽ được lưu lại.Sau khi lưu trữ,bạn sẽ rơi vào
chế độ câu lệnh.Nếu bạn muốn lựu lại biến đổi và
thoát khỏi vi thì hãy thực hiện lệnh sau:
:wq
Thỉnh thoảng bạn muốn lưu lại tập tin chỉ có quyền hạn đọc
thì hãy làm như sau:
:w!
:wq!
Trong các trường hợp đặc biệt,bạn không thể ghi những thay
đổi mà bạn làm trên tập tin(nếu như tập tin thuộc
một tài khoản khác) thì vi sẽ thông
báo cho bạn biết rằng bạn không thể ghi lên tập tin
được.Nếu bạn thực sự muốn ghi lên thì bạn cần phải quay về
sử dụng root và soạn thảo lại.
5.8.5
Thoát khỏi vi
Một cách để thoát khỏi vi là sử dụng :wq - lưu trữ
buffer hiện thời và thoát khỏi chương trình.Bạn
cũng có thể thoát khỏi chương trình mà
không lưu lại sự biến đổi khi sử dụng ":q" hoặc là
":q!".Phương án cuối dùng khi bạn biến đổi tập tin nhưng
lại không muốn lưu lại các biến đổi đó.
Có những trường hợp khi hệ thống hoặc là vi bị
đình chỉ.Khi ấy cả hai bản sao(elvis và vim) sẽ cố gắng
làm cho sự mất mát của buffer là nhỏ nhất.Cả hai
trình trên lưu lại các buffer đang mở bằng
các tập tin tạm thời.Những tập tin này giống như
các tập tin đang mở nhưng với dấu "." ở đầu.Nó là
tập tin ẩn.
Những tập tin này sẽ tự động được xóa đi sau khi bạn
hoàn thành công việc của mình một cách
bình thường.Còn nếu như chương trình bị đình
chỉ hoạt động thì tập tin này sẽ tồn tại.Nếu bạn muốn soạn
thảo lại tập tin này thì chương trình sẽ hỏi bạn
cách thức như thế nào.Tuy nhiên phần lớn của
công việc sẽ được phục hồi.elvis thậm chí còn gửi
cho bạn thư thông báo về bản sao của tập tin.
5.8.6 Cấu
hình vi
Các phiên bản của vi có thể được xây
dựng bằng các cách khác nhau.
Tập hợp các lệnh có thể được nhập vào ở chế độ
câu lệnh cho cấu hình nó một cách tự do.Bạn
có thể kích hoạt các hàm số,rút gọn
lập trình,cài đặt macro cho các nhiệm vụ tự
động...tất cả phụ thuộc vào trình soạn thảo của bạn.
Hầu như tất cả các lệnh đấy có thể đưa vào tập tin
cấu hình trong catalog home của bạn.elvis sẽ tìm tập tin
.exrc còn vim sẽ tìm .vimrc Hầu như các câu
lệnh cấu hình có thể nhập vào từ vỏ lệnh hoặc
chuyển vào các tập tin cấu hình.Bao gồm các
thông tin cài đặt,hoán vị văn bản,macro...
Việc thảo luận về các tham biến đi kèm và sự
khác nhau giữa các trình soạn thảo không phỉa
là mục đích của cuốn sách này.Nếu như bạn
quan tâm đến các chức năng mở rộng của trình soạn
thảo thì hãy đọc các trang man của nó hoặc
theo lệnh ":help".Bạn có thể xem cuốn sách "Cùng
học soạn thảo trên vi" của tác giả Lamb và Robbins.
Có nhiều chương trình ở Linux mở các tập tin theo
mặc định bằng vi.Ví dụ như soạn thảo tập tin crontab sẽ lấy vi
làm trình soạn thảo mặc định.Nếu bạn không
thích vi và bạn muốn chương trình khác sẽ
chạy theo mặc định.Bạn có thể làm được điều đó bằng
cách thiết lập giá trị VISUAL cho biến môi trường
bằng tên của trình soạn thảo mà bạn thích.Để
có thông tin về biến môi trường hãy xem
mục 5.1.3.Nếu bạn muốn trình soạn thảo của bạn được coi là
ngầm định trong mỗi lần đăng nhập thì bạn hãy cài
đặt giá trị cho biến VISUAL ở tập tin .bash_profile
hoặc là trong tập tin .bashrc.
5.8.7
Các phím điều khiển vi
Phần này như là mục tham khảo nhanh các lệnh cơ
bản của vi.Một vài trong số chúng bạn đã
làm quen ở trên,một vài là mới:
Operators
Phím
Trái,dưới,trên,phải
h,j,k,l
di chuyển đến cuối của
dòng
$
di chuyển đến đầu dòng
^
di chuyển đến cuối tập
tin
G
di chuyển đến đầu tập
tin
:1(số 1)
di chuyển đến dòng thứ
47
:47
Operators
Phím
xóa
dòng
dd
xóa 5
dòng
5dd
thay thế kí
tự
r
xóa kí
tự
x
xóa 10 kí
tự
10x
huỷ bỏ tác đông cuối
cùng
u
Liên kết dòng hiện tại
với dòng tiếp
theo
j
Operators
Phím
tìm kiếm "asdf" sau vị
trí con
trỏ
/asdf
tìm kiếm "asdf" trước vị
trí con
trỏ
?asdf
lặp lại tìm kiếm cuối
cùng ở văn
bản
/
sau vị trí con trỏ
lặp lại tìm kiếm cuối
cùng ở văn
bản
?
trước vị trí con trỏ
Operators
Phím
Thoát
khỏi
:q
Thoát không
ghi
:q!
lưu lại và
thoát
:wq
lưu lại không
thoát
:w
mở lại tập tin hiện hành
:e!
lưu lại nội dung buffer hiện
hành
:w asdf
mở tập tin
hejaz
:e hejaz
gửi tập tin asdf vào
buffer
:r asdf
gửi kết quả của ls vào
buffer
:r !ls
Biên dịch: Vũ
Dũng(vudung@mail.ru)
website:http://khigiacmoquayve.narod.ru
1-9-2005 Voronezh Russian