Mặc dù tôi không thể phủ nhận rằng tôi đã quá vật lộn với vi ngay từ đầu, tôi nghĩ rằng một lập luận có thể được đưa ra rằng vi thực sự rất đơn giản để học. . chỉ sử dụng một tập hợp con rất nhỏ của các tính năng của nó.
Đây là một đối số để sử dụng vi: vi tồn tại trên tất cả các hệ thống, sử dụng rất ít tài nguyên và có thể sử dụng được trên các kết nối không ổn định và chậm, trong đó các trình soạn thảo khác có thể bị lỗi hoặc chậm và không sử dụng được. Hoặc trong trường hợp hệ thống bị hỏng, do đó, các phím mũi tên không được hiểu chính xác (ví dụ như cài đặt terminfo xấu.) Vì vậy, vi có thể được sử dụng để sửa các tệp cấu hình dẫn đến sự cố mà không bị ảnh hưởng bởi sự cố.
Và đây là cách học một tập hợp con hữu ích của vi: Thứ nhất: ngừng nghĩ về vi như một trình soạn thảo "GUI" tương tác, và xem nó như một ngôn ngữ lập trình để thao tác các tệp văn bản. Lúc đầu, "vi" là viết tắt của chế độ VIsual và vi có một đối tác không chính thức, đây là một nơi tốt để bắt đầu. Nhập ex tại dấu nhắc shell (Tôi sẽ sử dụng để thể hiện return):
$ ex¬
Entering Ex mode. Type "visual" to go to Normal mode.
:
Bây giờ nhấn enter.
:¬
E749: empty buffer
:
Vì vậy, hãy đặt một cái gì đó trong đó. Nhập "a¬" và nhập một dòng văn bản, sau đó một khoảng thời gian trên một dòng:
:a¬
Hello World¬
.¬
:
Đó là lệnh chắp thêm. Dễ dàng, ngắn và ghi nhớ. Nhưng thật tuyệt khi thấy những gì trong bộ đệm:
:%p¬
Hello World
:
Đó là lệnh in, p, rõ ràng. % Là một tốc ký phạm vi dòng. Mỗi lệnh có thể được đi trước bởi một số dòng hoặc phạm vi mà lệnh nên áp dụng. % có nghĩa là "tất cả các dòng". $ có nghĩa là dòng cuối cùng và một khoảng thời gian có nghĩa là dòng hiện tại. Một số có nghĩa là dòng cụ thể. Một phạm vi được viết n, m và một số có thể được thêm hoặc trừ, vì vậy. + 1, $ - 1 có nghĩa là từ dòng tiếp theo đến dòng thứ hai. Một lệnh chỉ bao gồm một số dòng đi đến dòng đó. Đây là tập hợp con nhỏ còn lại của các lệnh tôi sử dụng:
:1i¬
this text is inserted before line 1.¬
.¬
:
:w /tmp/filename¬
"/tmp/filename" [New] 2L, 49C written
:
w ghi tất cả (hoặc phạm vi đã chọn) vào một tệp.
:1d¬
xóa dòng 1.
:.s/Hello/Hello,/¬
Hello, World
:.s/$/!/¬
Hello, World!
s thay thế một biểu thức chính quy. Thật tốt khi biết các biểu thức chính quy!
:q¬
E37: No write since last change (add ! to override)
q thoát. wq viết và thoát. q! thoát mà không cần viết, và trong một tĩnh mạch tương tự, w! buộc ghi vào một tập tin nếu có thể.
Bây giờ là một trong những mát mẻ:
:p
Hello, World!
:.!tr a-z A-Z
:p
HELLO, WORLD!
! như một lệnh lọc các dòng thành một lệnh shell.
Và cuối cùng:
:vi¬
vào chế độ VISUAL. Đừng để bị lừa. Nó trông giống như một trình soạn thảo, nhưng nó vẫn chỉ là một trình lập trình tương tác. Bạn chỉ cần nhìn vào bộ đệm mọi lúc, và một vài lệnh nữa. Trong chế độ trực quan a: hiển thị dấu nhắc: từ chế độ ex. Các phím mũi tên (nếu chúng hoạt động) di chuyển xung quanh và nếu không, thì hjkl làm! h trái, j xuống, k lên và l phải. 0 di chuyển đến ký tự đầu tiên và ^ (nghĩ regex ở đây!) Đến ký tự không phải không gian đầu tiên trên dòng. $ (regex lại!) di chuyển đến cuối dòng. Gõ: 999¬ đi đến dòng 999, một cách tự nhiên, giống như trong chế độ ex.
"i" vào chế độ chèn, giờ đây sẽ chèn vào các ký tự thay vì các dòng và kết thúc bằng cách nhấn thoát thay vì ".¬". "Tôi" chèn vào đầu, "a" sau ký tự bên dưới con trỏ và "A" sau khi kết thúc dòng hiện tại. Luôn nhấn thoát khi gõ xong văn bản. "x" xóa ký tự dưới con trỏ và "D" xóa từ con trỏ đến cuối dòng. "Y" yanks (bản sao) dòng hiện tại và "P" dán lại. ": pu" thực hiện tương tự, nhưng có thể được bắt đầu bằng số dòng. ": ya" là tương đương cũ của "Y" và một lần nữa, hữu ích để áp dụng cho phạm vi dòng. Tôi nghĩ rằng cũng có một lệnh đánh dấu, nhưng tôi sẽ thừa nhận tôi không nhớ nó. Tôi không bỏ lỡ nó.
Trên đây là những gì tôi sử dụng và tôi biết có lẽ tôi không phải là người dùng vi "rất hiệu quả". Mặt khác, tôi sử dụng tính linh hoạt của ex, ví dụ để chỉnh sửa tập tin cấu hình tập tin. Cần thay đổi tên máy chủ của bạn foo.bar.com thành www.foobar.com trong một số tệp conf?
for file in conf/*
do (echo "%s/foo.bar.com/www.foobar.com/" ; echo "wq") |ex $file ; done
Điều tôi đang cố gắng nói là, tôi nghĩ vấn đề với vi là mọi người nghĩ về nó như một biên tập viên khó tính. Tất cả chỉ cần thay đổi suy nghĩ của bạn một chút và xem nó như một ngôn ngữ lập trình tương tác rất đơn giản nhưng cũng rất mạnh mẽ thay thế. Mạnh mẽ đến mức ngay cả với một tập hợp con của các lệnh có sẵn, bạn có thể sử dụng nó rất hiệu quả - không chỉ là một trình soạn thảo mà còn là một công cụ có thể tạo tập lệnh chung được tích hợp tốt với phần còn lại của Unix. Tôi nghi ngờ nano sẽ làm tất cả những điều này - emacs ... có thể.