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".

h đi sang trái một kí tự
l đi sang phải một kí tự
k đi lên trên một kí tự
j đi xuống dưới một kí tự

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

Mục Lục

Biên dịch: Vũ Dũng(vudung@mail.ru)
website:http://khigiacmoquayve.narod.ru
1-9-2005 Voronezh Russian
Hosted by uCoz