Không có "sử dụng chung" !
, nó chỉ là một sửa đổi. Mỗi lệnh được chọn để thêm những gì !
sẽ làm với nó.
Trong nhiều trường hợp, các lệnh được lập trình để !
buộc chúng. Các ví dụ bao gồm q
bạn đề cập, nhưng cũng save
: save!
sẽ ghi đè lên tệp nếu nó đã tồn tại, trong khi save
sẽ trả về lỗi và đề nghị sử dụng save!
nếu bạn chắc chắn về những gì bạn đang làm.
Cuối cùng, !
chính nó được sử dụng cho các lệnh shell, ví dụ :!ls
hoặc :!mkdir foo
.
Trong trường hợp read
(từ nhận xét của bạn), lệnh read! <something>
được Vim diễn giải là "thực thi <something>
và đọc (nghĩa là, trong Vim, ghi vào bộ đệm) đầu ra của nó" . Vì vậy, ở đây nó như thể !
hành vi không phải là một sửa đổi của read
lệnh mà là lệnh độc lập !
. Có thể là read
lệnh không khai báo một biến thể với !
Vim chỉ diễn giải phần còn lại một cách độc lập (vì vậy nó đọc " !
được sử dụng một mình" sau read
) hoặc read
tuyên bố một biến thể !
có hành vi cụ thể này ( "thực thi phần còn lại là shell" ) xảy ra để bắt chước những gì " !
được sử dụng một mình" làm.
Tôi đoán rằng mang đi là: không có quy tắc, mỗi lệnh xác định những gì !
sẽ làm và trong khi có một nỗ lực để có một sự nhất quán trong hiệu ứng của các sửa đổi, không có các quy tắc siêu nghiêm ngặt (như " !
sẽ luôn luôn là buộc " ) cho phép có nhiều hành vi hữu ích hơn với ít lần nhấn phím hơn, đây cũng là một điểm cộng.
vimtutor
. Mất khoảng nửa giờ và là cách tốt nhất để tìm hiểu những điều cơ bản của vi / vim.